This release adds 1 notable feature for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+11 more
Summary
AI summaryFixed bytecode handling and stack corruption in range mode.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Feature | Medium |
Adds opt‑in flag --range-leak-nvs to preserve VMState NV slots across JMP_NATIVE exits for lifted writes to specific registers. Adds opt‑in flag --range-leak-nvs to preserve VMState NV slots across JMP_NATIVE exits for lifted writes to specific registers. Source: llm_adapter@2026-05-25 Confidence: low |
— |
| Bugfix | Medium |
Moved runtime nonce from VMState to a blob slot to prevent XOR corruption on subsequent entries. Moved runtime nonce from VMState to a blob slot to prevent XOR corruption on subsequent entries. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
Ensures lifter appends JMP_NATIVE at end of last CFG block when no terminator exists, preventing dispatch_tail from fetching past bytecode. Ensures lifter appends JMP_NATIVE at end of last CFG block when no terminator exists, preventing dispatch_tail from fetching past bytecode. Source: llm_adapter@2026-05-25 Confidence: high |
— |
| Bugfix | Medium |
Warns against using --range mode with cobalt stagers or stageless payloads due to CALL_VM trampoline mis‑behavior; recommends default or --pack modes. Warns against using --range mode with cobalt stagers or stageless payloads due to CALL_VM trampoline mis‑behavior; recommends default or --pack modes. Source: llm_adapter@2026-05-25 Confidence: low |
— |
| Bugfix | Medium |
Documents issues with --range mode for cobalt stagers and stageless payloads, recommending default or --pack modes instead. Documents issues with --range mode for cobalt stagers and stageless payloads, recommending default or --pack modes instead. Source: granite4.1:30b@2026-05-25-audit Confidence: low |
— |
Full changelog
v1.0.1:
- runtime nonce used to live in VMState which dies with the host stack between range entries, so entry 2+ was XORing the handler table with whatever shit was sitting on the stack. moved it to a blob slot like a dumbass shouldve done from the start.
- lifter now drops a JMP_NATIVE at the end of the last cfg block when nothing else terminates it. before this dispatch_tail kept fetching past the end of bytecode and landing on garbage handlers.
- added --range-leak-nvs opt-in. blasts VMState NV slots back over the prologue stack saves on JMP_NATIVE imm exit so lifted writes to ebx/ebp/esi/edi and r12-r15 actually make it to the surrounding native bytes. dont flip this on function-shaped ranges or mid-flow escapes will trash the caller's nvs.
- ranges mode is fucking finicky. cobalt stagers and stageless choke on it because they pull a
call X; X: pop regrip-via-call stunt to fish out their own runtime addr, and CALL_VM pushes a trampoline_addr instead of the real ret_va, so the pop reads dog shit. use --pack or default for those, they work end-to-end.
tl;dr fixed a lot of bugs. --range works fine for some shellcode, not so much for others. if you have issues, prefer default mode or --pack. still investigating the issue with ranged mode.
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About D7EAD/mkPIVM
All releases →Related context
Related tools
Beta — feedback welcome: [email protected]