<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Datagrams on hexproof</title><link>https://hexproof.dev/datagrams/</link><description>Recent content in Datagrams on hexproof</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://hexproof.dev/datagrams/index.xml" rel="self" type="application/rss+xml"/><item><title>Many RSA Libraries Leave the Bleichenbacher Oracle Open</title><link>https://hexproof.dev/datagrams/bleichenbacher-oracle-survey/</link><pubDate>Sat, 06 Jun 2026 11:00:00 +0000</pubDate><guid>https://hexproof.dev/datagrams/bleichenbacher-oracle-survey/</guid><description>&lt;p>Companion to &lt;a href="../datagrams/ok-err-is-a-padding-oracle/">An Ok/Err Result Is a Bleichenbacher Oracle&lt;/a>. It showed that one library&amp;rsquo;s &lt;code>Ok&lt;/code>/&lt;code>Err&lt;/code> decrypt result is a deterministic &lt;a href="https://www.iacr.org/cryptodb/data/paper.php?pubkey=1037">Bleichenbacher&lt;/a> oracle. That &lt;code>Ok&lt;/code>/&lt;code>Err&lt;/code> reveals &lt;em>the bit&lt;/em>: was the PKCS#1 v1.5 padding valid? This post surveys which other implementations leak it.&lt;/p>
&lt;p>That bit leaks more than one way, and has since Bleichenbacher&amp;rsquo;s 1998 paper: in the response itself (behavioral, as &lt;a href="https://robotattack.org/">ROBOT&lt;/a> re-found across TLS servers), or through a side channel the code failed to close, by timing (&lt;a href="https://people.redhat.com/~hkario/marvin/">Marvin&lt;/a>) or by cache (&lt;a href="https://ieeexplore.ieee.org/document/8835216/">9 Lives&lt;/a>). This post is about the behavioral channel, where the bit is in the result, no statistics required. &lt;strong>Implicit rejection&lt;/strong> closes that channel: on bad padding, return a deterministic synthetic message instead of an error, so there is no &lt;code>Ok&lt;/code>/&lt;code>Err&lt;/code> to read (&lt;a href="https://datatracker.ietf.org/doc/draft-irtf-cfrg-rsa-guidance/">CFRG draft&lt;/a>, Alicja Kario). It is a stopgap, since the fix is to stop using RSA v1.5 encryption. A &lt;strong>&amp;ldquo;closed&amp;rdquo;&lt;/strong> verdict means that success/error bit is gone; a &lt;strong>&amp;ldquo;removed&amp;rdquo;&lt;/strong> verdict means a library dropped v1.5 decryption.&lt;/p></description></item><item><title>An Ok/Err Result Is a Bleichenbacher Oracle</title><link>https://hexproof.dev/datagrams/ok-err-is-a-padding-oracle/</link><pubDate>Sat, 06 Jun 2026 09:00:00 +0000</pubDate><guid>https://hexproof.dev/datagrams/ok-err-is-a-padding-oracle/</guid><description>&lt;p>A function returns &lt;code>Ok&lt;/code> on valid padding and &lt;code>Err&lt;/code> on invalid padding. That is a padding oracle. Bleichenbacher published &lt;a href="https://www.iacr.org/cryptodb/data/paper.php?pubkey=1037">the attack&lt;/a> in 1998. It still works, and it does not care how fast your code runs.&lt;/p>
&lt;p>The &lt;em>timing&lt;/em> variant, &lt;a href="https://people.redhat.com/~hkario/marvin/">Marvin&lt;/a>, leaks tens of nanoseconds under microseconds of jitter. Kario demonstrated it remotely over a network, but pulling the signal out takes statistics over many samples. The behavioral version needs none of that. Böck, Somorovsky, and Young&amp;rsquo;s &lt;a href="https://robotattack.org/">ROBOT&lt;/a> (disclosed 2017, USENIX Security 2018) re-found Bleichenbacher&amp;rsquo;s oracle across at least seven vendors (and several open-source projects) by reading their &lt;em>responses&lt;/em>, not their clocks. Its authors were candid about how little that took:&lt;/p></description></item><item><title>MetaMask Demonic Mobile: seed phrase survives autolock on Android</title><link>https://hexproof.dev/datagrams/metamask-demonic-mobile-android/</link><pubDate>Sat, 16 May 2026 00:00:00 +0000</pubDate><guid>https://hexproof.dev/datagrams/metamask-demonic-mobile-android/</guid><description>&lt;p>A MetaMask Android user enters their password, the wallet unlocks, they put the phone down. Thirty seconds later the autolock fires and the password screen returns. MetaMask&amp;rsquo;s UI indicates the keys are no longer reachable. The password the user just typed is in the process heap. So is the 12-word BIP39 mnemonic — in indexed form after every unlock, in contiguous plaintext from any session in which the user has viewed their seed phrase. MetaMask&amp;rsquo;s onboarding requires every new wallet to view and confirm it.&lt;/p></description></item><item><title>Cerberus is stalkerware. Google Play hosts it.</title><link>https://hexproof.dev/datagrams/cerberus-on-play/</link><pubDate>Thu, 30 Apr 2026 00:25:00 +0000</pubDate><guid>https://hexproof.dev/datagrams/cerberus-on-play/</guid><description>&lt;p>A notification appears on the victim&amp;rsquo;s locked phone with whatever text the abuser typed. The victim taps it. Fifteen seconds later, the front camera silently takes a photo, the phone records where it is, and any other actions the abuser set up run too. The victim sees none of it.&lt;/p>
&lt;p>The lock-screen notification is one of many triggers. Cerberus runs whenever the phone does almost anything — turns on, turns off, gets unlocked, joins a different network, installs an app, crosses a place the abuser marked, picks up movement. Each run schedules the next one. Even if the abuser hasn&amp;rsquo;t logged in for weeks, Cerberus is still running all day — recording when it was set to, saving any photos or recordings to upload later, and picking up where it left off after a restart. The 44 remote commands the abuser can send from &lt;code>cerberusapp.com&lt;/code> are on top of that.&lt;/p></description></item><item><title>Cerberus Anti-theft is stalkerware: a reverse engineering</title><link>https://hexproof.dev/datagrams/cerberus-stalkerware-re/</link><pubDate>Thu, 30 Apr 2026 00:24:00 +0000</pubDate><guid>https://hexproof.dev/datagrams/cerberus-stalkerware-re/</guid><description>&lt;p>There is an app on Google Play called &lt;strong>Lock Screen Protector&lt;/strong> (&lt;code>com.lsdroid.lsp&lt;/code>). It requests accessibility service permissions — the most sensitive permission on Android. Once granted, it reads all screen content, performs gestures, and takes screenshots. It monitors for the power dialog and dismisses it — the phone cannot be turned off. It blocks the notification shade — airplane mode cannot be enabled. When someone tries to power off the device, it captures a screenshot and sends the JPEG bytes to another app: Cerberus.&lt;/p></description></item><item><title>The Fossil Record of Harness Engineering</title><link>https://hexproof.dev/datagrams/fossil-record-harness-engineering/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://hexproof.dev/datagrams/fossil-record-harness-engineering/</guid><description>&lt;p>Every AI coding tool solves the same fundamental problem: fitting the right information into a fixed-size context window so an LLM can write correct code. Claude Code (v2.1.88, source maps), &lt;a href="https://github.com/Aider-AI/aider">Aider&lt;/a> (v0.86.3, Apache 2.0), Cursor (leaked prompts, v1.0-2.0), Windsurf (leaked prompts, Waves 1-11), and GitHub &lt;a href="https://github.com/microsoft/vscode-copilot-chat">Copilot&lt;/a> (vscode-copilot-chat v0.43.0, MIT) solve it five completely different ways.&lt;/p>
&lt;p>&lt;a href="https://x.com/tobi/status/1935533422589399127">Tobi Lutke&lt;/a> named the discipline &amp;ldquo;context engineering&amp;rdquo; &amp;ndash; &amp;ldquo;the art of providing all the context for the task to be plausibly solvable by the LLM.&amp;rdquo; &lt;a href="https://mitchellh.com/writing/my-ai-adoption-journey">Mitchell Hashimoto&lt;/a> pushed further to &amp;ldquo;harness engineering&amp;rdquo; &amp;ndash; &amp;ldquo;anytime you find an agent makes a mistake, you take the time to engineer a solution such that the agent never makes that mistake again.&amp;rdquo; Each architecture is a fossil record of the constraint its team built around. Claude Code: cost. Aider: model portability. Cursor: edit speed. Windsurf: autonomy. Copilot: model plurality. What follows is how each team engineered their harness, examined through source code, leaked prompts, and open-source repositories.&lt;/p></description></item></channel></rss>