<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>agmi findings</title><link>https://agentmemoryintegrity.org/findings/</link><description>Dated findings from the agent memory integrity scorecard.</description><language>en</language><item><title>A managed cloud store joins the table: Vertex AI Memory Bank serves seven edits, two have no API</title><link>https://agentmemoryintegrity.org/findings/a-managed-cloud-store-joins-the-table-vertex.html</link><guid>https://agentmemoryintegrity.org/findings/a-managed-cloud-store-joins-the-table-vertex.html</guid><pubDate>Wed, 07 Oct 2026 09:00:00 +0000</pubDate><description>The first managed store on the board. There is no disk, so the attacker is a principal holding roles/aiplatform.user on the project outside the agent&#x27;s session, editing through memories.patch, memories.delete and memories.create. Content tamper, truncation, middle delete, forgery, cross-context replay, rollback replay and metadata tamper are all served as genuine on the next retrieve. Reorder and whole-store rollback score n/a: the API cannot set create_time, and a managed store exposes no snapshot or restore of its own state. Memory Bank records a revision for every change to a memory&#x27;s fact, so an edit is discoverable by an investigator afterwards; nothing on the read path consults it. Google makes no integrity claim for the store, so this is a reference measurement rather than a vulnerability: the same shape as the frameworks, now with a cloud provider in the same table.</description></item><item><title>First row to refuse all eight record-level edits on the read path: the Agent Memory reference runtime</title><link>https://agentmemoryintegrity.org/findings/first-row-to-refuse-all-eight-record-level-edits.html</link><guid>https://agentmemoryintegrity.org/findings/first-row-to-refuse-all-eight-record-level-edits.html</guid><pubDate>Tue, 06 Oct 2026 09:00:00 +0000</pubDate><description>Every canonical SQLite row is hashed into a bucketed Merkle digest, the governance log is chained, and open() fails closed on any mismatch, so T1 to T8 are refused before the agent reads anything. T9, the rollback of the whole store to an older genuine copy, is served: the generation anchor sits in a sidecar beside the database, so the restored copy opens as current with the newest memory gone. The maintainers accepted the row as external integrity evidence for T1 to T9 and pin the suite in their own CI (#639, #650).</description></item><item><title>T9, a rollback of the whole store that every digest still passes</title><link>https://agentmemoryintegrity.org/findings/t9-a-rollback-of-the-whole-store-that.html</link><guid>https://agentmemoryintegrity.org/findings/t9-a-rollback-of-the-whole-store-that.html</guid><pubDate>Tue, 06 Oct 2026 09:00:00 +0000</pubDate><description>Restore an older complete copy of everything the store keeps on disk, taken before one more genuine record was written through the tool&#x27;s own API. Every byte in the restored copy is genuine; only the newest record is missing. Served by the three LangGraph checkpointers, OpenAI Agents SDK, LlamaIndex, CrewAI, Letta, Mem0, acrf-memory-guard, the chain-only Atelya and CONTINUUM rows, the OpenFang model, the Agent Memory reference runtime, inspeximus with receipts off or with the config home in the attacker&#x27;s hands, and memory-blackbox restarted. Reported only by the rows that hold a head off the store: langgraph-ledger, Atelya anchored, CONTINUUM attested, inspeximus with receipts on and the config home out of reach, and memory-blackbox with the watcher alive. The composition engine shipped in the same release found that the reference store&#x27;s own genuine write re-anchored its witness to a truncated chain, so truncate-then-write laundered a deletion; the witness now advances only forward.</description></item><item><title>A vendor fix driven by the suite: memory-blackbox restart gap, reported and fixed in a day</title><link>https://agentmemoryintegrity.org/findings/a-vendor-fix-driven-by-the-suite-memory-blackbox.html</link><guid>https://agentmemoryintegrity.org/findings/a-vendor-fix-driven-by-the-suite-memory-blackbox.html</guid><pubDate>Fri, 02 Oct 2026 09:00:00 +0000</pubDate><description>With the agent process alive, the memory-blackbox memory.md watcher reports all eight edits on scan. With the agent restarted between the edit and the scan, 0.1.0 served all eight: baseline() seeded the watcher from the file bytes, so an edit made while the agent was down became the trusted state. The maintainer was told privately under the project&#x27;s security policy on the morning of 2 October; the restart row was held back from the scorecard meanwhile. The fix shipped as 0.1.1 the same day: baseline() now takes the ledger&#x27;s last write for each watched file as the trusted state, a file the ledger has never seen is recorded once so a cold start reads differently from a mismatch, and the maintainer ran the suite against the fix before tagging. Re-measured on 0.1.1, both rows report all eight. The repo now has private vulnerability reporting switched on and credits the report in its release notes and SECURITY.md.</description></item><item><title>The suite catches two of its own no-op edits (control C3)</title><link>https://agentmemoryintegrity.org/findings/the-suite-catches-two-of-its-own-no-op.html</link><guid>https://agentmemoryintegrity.org/findings/the-suite-catches-two-of-its-own-no-op.html</guid><pubDate>Wed, 30 Sep 2026 09:00:00 +0000</pubDate><description>The inspeximus maintainer found that on the inspeximus and Mem0 rows the T6 cross-context replay was a no-op: the victim pool was read from both contexts, so the donor was copied onto itself and the cell scored as accepted on an edit that never happened. The earlier finding that a receipt does not bind the owning user rested on that no-op and is withdrawn; with the pool scoped to the first context, both receipt rows report T6. A third control now runs before every verdict: each attack proves its edit landed as intended, and a cell whose edit did not land reads error. That control also found the Mem0 T4 reorder was a no-op (the adapter wrote each point back under its own id); fixed, and Mem0 still accepts it on a real swap. Those cells read error until the scoped victim pool lands.</description></item><item><title>Head deletion needs an anchor outside the store (LangGraph #9099)</title><link>https://agentmemoryintegrity.org/findings/head-deletion-needs-an-anchor-outside-the-store.html</link><guid>https://agentmemoryintegrity.org/findings/head-deletion-needs-an-anchor-outside-the-store.html</guid><pubDate>Wed, 30 Sep 2026 09:00:00 +0000</pubDate><description>Binding a record to its place (#9004) cannot see a record that has been removed, so deleting the newest checkpoints still rolls a thread back silently. A community reference implementation lets the caller pass the id of the head it trusts; with it set, head deletion raises on both the sync and async checkpointers, and merged with the #9004 fix the rollback-by-overwrite case is rejected as well. Measured with the suite on both paths; the history view is not covered by the anchor and that is on record.</description></item><item><title>Six of six stores accept all eight at-rest edits</title><link>https://agentmemoryintegrity.org/findings/six-of-six-stores-accept-all-eight-at-rest.html</link><guid>https://agentmemoryintegrity.org/findings/six-of-six-stores-accept-all-eight-at-rest.html</guid><pubDate>Sun, 27 Sep 2026 09:00:00 +0000</pubDate><description>OpenAI Agents SDK SQLiteSession and LlamaIndex Memory join LangGraph SqliteSaver, Letta block history, Mem0 local Qdrant and inspeximus in its default configuration: every one of the eight storage-level edits is served as genuine, and none of the six checks anything on read. OpenAI closed its issue with a documentation change stating the session store trusts its storage; LlamaIndex has a documentation note in review and the issue stays open for an integrity option.</description></item><item><title>Four of four stores accept all eight at-rest edits</title><link>https://agentmemoryintegrity.org/findings/four-of-four-stores-accept-all-eight-at-rest.html</link><guid>https://agentmemoryintegrity.org/findings/four-of-four-stores-accept-all-eight-at-rest.html</guid><pubDate>Fri, 25 Sep 2026 09:00:00 +0000</pubDate><description>LangGraph SqliteSaver, Letta block history, Mem0 local Qdrant and inspeximus in its default configuration all serve every one of the eight storage-level edits as genuine. None of the four checks anything on read.</description></item><item><title>Withdrawn: a receipt does not bind the owning user (inspeximus)</title><link>https://agentmemoryintegrity.org/findings/withdrawn-a-receipt-does-not-bind-the-owning.html</link><guid>https://agentmemoryintegrity.org/findings/withdrawn-a-receipt-does-not-bind-the-owning.html</guid><pubDate>Fri, 25 Sep 2026 09:00:00 +0000</pubDate><description>This finding is withdrawn as of 2026-09-30, see the entry above. The T6 edit on the inspeximus rows had not actually crossed contexts, so the cell measured nothing. With a real crossing, the receipts report it.</description></item><item><title>Encryption without identity binding (LangGraph #9004)</title><link>https://agentmemoryintegrity.org/findings/encryption-without-identity-binding-langgraph-9004.html</link><guid>https://agentmemoryintegrity.org/findings/encryption-without-identity-binding-langgraph-9004.html</guid><pubDate>Thu, 24 Sep 2026 09:00:00 +0000</pubDate><description>LangGraph&#x27;s EncryptedSerializer authenticates the ciphertext but not the record&#x27;s place, so a genuine encrypted checkpoint from one thread verifies in another (T6) and an older one verifies over the newest (T7). A proposed fix binding thread, checkpoint id and channel as AEAD associated data rejects both; deleting the head row (T2) still rolls the thread back, because binding a record to its place cannot see a record that has been removed.</description></item><item><title>A vendor fix, caught by re-measurement (inspeximus 3.5.2)</title><link>https://agentmemoryintegrity.org/findings/a-vendor-fix-caught-by-re-measurement-inspeximus-3-5-2.html</link><guid>https://agentmemoryintegrity.org/findings/a-vendor-fix-caught-by-re-measurement-inspeximus-3-5-2.html</guid><pubDate>Tue, 22 Sep 2026 09:00:00 +0000</pubDate><description>After the maintainer shipped a write-time quarantine and a stuffing penalty, the hidden-instruction and retrieval-hijack cells moved from surfaced on all five fixtures to surfaced on one and two. The cells stay surfaced, since a tool is kept out only when the attacker wins none, but the defence is engaging and the change is on record.</description></item><item><title>A forward-only hash chain misses truncation (OpenFang)</title><link>https://agentmemoryintegrity.org/findings/a-forward-only-hash-chain-misses-truncation-openfang.html</link><guid>https://agentmemoryintegrity.org/findings/a-forward-only-hash-chain-misses-truncation-openfang.html</guid><pubDate>Mon, 14 Sep 2026 09:00:00 +0000</pubDate><description>A chain that walks forward from the first record verifies every link and never notices that the last two are gone. Persisting the tip closes exactly that gap. This was the first result the suite produced and the reason the reference model exists.</description></item></channel></rss>