
SQLite 3.53.4 - Alto - Locale - scrittura OOB nell'heap - changeset di sessione con crescita nCol omonima
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-session-ncol
Classe: heap OOB write Reach: Locale
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) con -DSQLITE_ENABLE_SESSION. Un changeset a due blocchi che riutilizza il nome di tabella t con nCol=2 e poi nCol=64 salta il reset di sessionTableInfo (sqlite3session.c:5619) ed esegue memset oltre l'aUpdateMask del primo blocco. ASan WRITE di dimensione 12 in sessionUpdateFind. Controllo singolo UPDATE a 2 colonne apply-rc=0.
Non è un amalgamation predefinito a meno che SESSION sia attivo. CVE-2026-50812 NPD è chiuso su 3.53.2+. Non è un payload RCE weaponizzato. L'oracolo è l'ASan WRITE.
| ID | nessuna CVE al momento |
| Classe | heap OOB write (ASan WRITE di dimensione 12; RCE non dimostrata) |
| Reach | Locale (changeset non attendibile tramite sqlite3changeset_apply*) |
| CWE | CWE-787 |
| CVSS | Alto: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Prodotto | SQLite Session extra (Hwaci) |
| Affetto | 3.53.4 (b09c88c) compilato -DSQLITE_ENABLE_SESSION |
| Auth | l'host applica un changeset non attendibile |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1:18900. Testimone ASan WRITE-of-size-12. |
Applicare un changeset non attendibile il cui secondo blocco di tabella riutilizza un nome di tabella con un nCol maggiore. Heap OOB write. Extra di compilazione. Non è un amalgamation predefinito a meno che SESSION sia attivo.
Il primo blocco alloca aUpdateMask da pIter->nCol. Il blocco successivo con lo stesso nome salta il reset di sessionTableInfo ed esegue memset di una maschera più grande sopra la vecchia allocazione. Lab: nCol=2 e poi nCol=64 UPDATE. ASan WRITE di dimensione 12 in sessionUpdateFind. Controllo singolo UPDATE a 2 colonne apply-rc=0.
Non trattare questo pacchetto come un gadget write-what-where. ASan WRITE-of-size-12 è l'oracolo.
Venti ricerche nel sorgente di SQLite 3.53.4 dopo l'ondata FTS5 / session-NPD di 3.53.2. CVE-2026-50812 è chiuso (sessionBindRow tratta un valore mancante come SQLITE_CORRUPT). Session continua a usare come chiave SessionApplyCtx solo sul nome della tabella. Un secondo blocco con lo stesso nome e un numero di colonne dichiarato maggiore riutilizza aUpdateMask.
Vicoli ciechi già registrati: considerare l'amalgamation predefinito come in scope (SESSION è disattivato); ri-segnalare CVE-2026-50812; inviare un singolo blocco di tabella con nCol=64 contro uno schema a 2 colonne (schemaMismatch, nessuna scrittura); dichiarare RCE da un memset di 12 byte.
cd lab
./run.sh
Amalgamation ASan dallo zip ufficiale sqlite-src-3530400. Extra di compilazione -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK. Health su 127.0.0.1:18900. Associalo al loopback.
SUCCESS sqlite-session-ncol how=asan-heap-write-sessionUpdateFind write-size=12 control-apply-rc=0 SQLITE-SESSION-NCOL-WITNESS
Quando un blocco di tabella di un changeset successivo riutilizza un nome, ricostruisci SessionApplyCtx come già avviene per un nuovo nome: libera aUpdateMask, riesegui sessionTableInfo, rifiuta un nCol maggiore rispetto allo schema attivo. Trunk 3f57024aec / branch-3.53 a1dd7123d8 (2026-08-17) è successivo a questa GA.
b09c88c14082339b66c7b7158d609a771e64ca69)sessionChangesetApply :5619, sessionUpdateFind :4381-4412