CVE-2020-35906

7.8 HIGH

📋 TL;DR

This vulnerability in the Rust futures-task crate allows use-after-free memory corruption when handling non-static types in waker functions. Attackers could exploit this to execute arbitrary code or crash applications. Any Rust application using affected versions of the futures-task crate is vulnerable.

💻 Affected Systems

Products:
  • Rust applications using futures-task crate
Versions: futures-task crate versions before 0.3.6
Operating Systems: All platforms running Rust applications
Default Config Vulnerable: ⚠️ Yes
Notes: Only affects Rust applications that use the futures-task crate with non-static types in waker contexts.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote code execution leading to complete system compromise, data theft, or service disruption.

🟠

Likely Case

Application crashes causing denial of service, potentially leading to memory corruption that could be leveraged for further exploitation.

🟢

If Mitigated

Limited impact with proper memory safety controls and sandboxing, but still potential for crashes.

🌐 Internet-Facing: MEDIUM
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: MEDIUM

Exploitation requires specific conditions with non-static types and memory management patterns.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: futures-task 0.3.6 and later

Vendor Advisory: https://rustsec.org/advisories/RUSTSEC-2020-0060.html

Restart Required: Yes

Instructions:

1. Update Cargo.toml to require futures-task >= 0.3.6
2. Run 'cargo update' to fetch the patched version
3. Rebuild and redeploy your application
4. Restart affected services

🔧 Temporary Workarounds

Avoid non-static types in waker contexts

all

Refactor code to avoid using non-static types with futures_task::waker functions

🧯 If You Can't Patch

  • Isolate vulnerable applications in containers or sandboxes with limited permissions
  • Implement network segmentation to limit attack surface and lateral movement potential

🔍 How to Verify

Check if Vulnerable:

Check Cargo.lock or run 'cargo tree | grep futures-task' to see if version < 0.3.6 is used

Check Version:

cargo tree | grep futures-task

Verify Fix Applied:

Verify Cargo.lock contains futures-task >= 0.3.6 and rebuild application successfully

📡 Detection & Monitoring

Log Indicators:

  • Application crashes with memory corruption errors
  • Segmentation faults in Rust applications

Network Indicators:

  • Unusual outbound connections from Rust services
  • Service disruption patterns

SIEM Query:

source="application_logs" AND ("segmentation fault" OR "use-after-free" OR "memory corruption") AND process="rust_app"

🔗 References

📤 Share & Export