Crafting a Full Exploit RCE from a Crash in Autodesk Revit R... #1474
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🤖 Automated Content Update
This PR was automatically generated by the HackTricks News Bot based on a technical blog post.
📝 Source Information
🎯 Content Summary
Post: Crafting a Full Exploit RCE from a Crash in Autodesk Revit RFA File Parsing (October 8, 2025) by Simon Zuckerbraun (Trend Micro ZDI).
What’s exploited
A type confusion in Autodesk Revit 2025’s RFA deserializer lets a crafted RFA file drive an indirect call through a fake vtable pointer, enabling stack pivot and full x64 ROP for arbitrary command execution. Tracked as CVE‑2025‑5037 (ZDI‑CAN‑26922, advisory ZDI‑25‑597), patched by Autodesk in July 2025. Comb...
🔧 Technical Details
Deserializer vtable type confusion → single‑gadget execution: When a deserializer assumes vtable[0] for destructor on objects read by 16‑bit type index, selecting a non‑polymorphic type lets the value at offset 0 be attacker‑controlled. Choosing
AString(idx 0x1F) places a pointer to attacker bytes at offset 0; the destructor loop executescall qword ptr [rax], granting one controlled gadget per object.Controlling OLE RFA bytes despite auto‑repair: RFA’s
Global\Lateststream is header + GZIP + zero‑pad + ECC trailer. Revit auto‑corrects minor changes and rejects big mismatches. Recompute ECC and use Revit‑compatible gzip/gunzip to ensure the exact bytes reach the deserializer and persist.Stack pivot without stack smash: If
raxis a 32‑bit heap address (Win10), hunt a misalignedmov esp,eax“monster gadget” that eventuallyrets to the heap ROP chain. On Win11, use the dest...🤖 Agent Actions
I analyzed the ZDI blog post and updated HackTricks with the new techniques and tools. Summary of what I did:
rcx = [rbx]; rax = [rcx]; call qword ptr [rax]
Files modified:
Notes:
References added:
This PR was automatically created by the HackTricks Feed Bot. Please review the changes carefully before merging.