
SQLite 3.53.4 - Alta - Local - Crash - FTS5 secure-delete PutVarint desbordamiento de footer
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-fts5-securedel
Clase: Crash Alcance: Local
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69) - Hwaci
fts5DoSecureDelete reconstruye un footer de hoja FTS5 con sqlite3Fts5PutVarint después de nPg = iPgIdx. Los offsets de clave decodificados del footer no están limitados contra el blob original, por lo que el cursor de PutVarint se sale de nn + FTS5_DATA_PADDING (20). Típico extra SQLITE_ENABLE_FTS5. La base de datos del ataque ya usaba secure-delete.
Esto es un remanente del posterior trunk Fossil 9cd4f9e920 / Git d9de6eedbe91 / branch-3.53 34171bee08 (2026-08-11, YEONBA). Ese check-in es posterior a este GA. No es CVE-2026-11824: fts5LeafRead ya rechaza szLeaf<4 en este pin.
| ID | sin CVE todavía |
| Clase | Crash (escritura ASan de tamaño 1; RCE no demostrado) |
| Alcance | Local (abrir una base de datos FTS5 manipulada, luego DELETE/flush) |
| CWE | CWE-787 |
| CVSS | Alto: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| Producto | SQLite (espejo en GitHub sqlite/sqlite) |
| Afectado | 3.53.4 SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc |
| Auth | ninguna (archivo de índice no confiable) |
| Licencia | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1:18860. Escritura en heap ASan. Sin payload de RCE. |
Abrir una base de datos FTS5 manipulada que ya usaba secure-delete, luego DELETE (o cualquier escritura que vacíe un secure-delete) para que fts5DoSecureDelete escriba varints de footer más allá de Fts5Data. Crash / escritura en heap ASan de tamaño 1. RCE no demostrado. No es CVE-2026-11824.
Solo MATCH no es este sink. El disparador es DELETE/flush. El archivo manipulado no necesita SQLITE_DBCONFIG_DEFENSIVE desactivado.
Veinte búsquedas en el código fuente de SQLite 3.53.4 tras otros pins de bases de datos y servidores HTTP. CVE-2026-11822 / CVE-2026-11824 está cerrado en este árbol (fts5LeafRead szLeaf<4). El límite posterior del trunk de YEONBA no lo está. El archivo fts5corruptB.test de 3.53.4 todavía termina en el test 3.2; el test 4.0 del trunk es el hexdb más DELETE FROM t WHERE rowid = 1.
iPgIdx -= nShift;
nPg = iPgIdx;
fts5PutU16(&aPg[2], iPgIdx);
for(iIdx=0; iIdx<nIdx; /* no-op */){
u32 iVal = 0;
iIdx += fts5GetVarint32(&aIdx[iIdx], iVal);
iKeyIn += iVal;
if( iKeyIn!=iDelKeyOff ){
int iKeyOut = (iKeyIn - (iKeyIn>iOff ? nShift : 0));
nPg += sqlite3Fts5PutVarint(&aPg[nPg], iKeyOut - iPrevKeyOut);
iPrevKeyOut = iKeyOut;
}
}
ext/fts5/fts5_index.c:5514-5544. iKeyIn es un int de 32 bits. El trunk posterior conserva el nPg original, usa i64 iKeyIn y rechaza iKeyIn>nPg antes de PutVarint.
Caminos equivocados: tratar CVE-2026-11824 como este bug; MATCH en lugar de DELETE; un plant de CREATE/INSERT en vivo que mantenía szLeaf en rango y no desbordaba; llamar RCE a la cadena WAL-plus-FTS5 de Winter sin un payload.
cd lab
./run.sh
Amalgamación ASan del zip oficial sqlite-src-3530400, -DSQLITE_ENABLE_FTS5. Se requiere el hexdb lab/yeonba-fts5corruptB-4.hexdb (trunk fts5corruptB.test 4.0). Bind loopback 127.0.0.1:18860. Proyecto Compose sqlite-fts5-securedel.
SUCCESS sqlite-fts5-securedel how=asan-heap-buffer-overflow-write-1-fts5DoSecureDelete db=yeonba-hexdb bytes=5120 SQLITE-FTS5-SECUREDEL-WITNESS
Frames de ASan: fts5PutVarint64 -> sqlite3Fts5PutVarint -> fts5DoSecureDelete / fts5FlushSecureDelete.
Conservar el nPg original. Ampliar iKeyIn a i64. Rechazar iKeyIn>nPg antes de sqlite3Fts5PutVarint. Eso es Fossil 9cd4f9e920 / branch-3.53 34171bee08. Aplicarlo con cherry-pick sobre 3.53.
b09c88c14082339b66c7b7158d609a771e64ca69ext/fts5/fts5_index.c fts5DoSecureDelete, fts5FlushSecureDelete, fts5LeafReadext/fts5/fts5_varint.c sqlite3Fts5PutVarintd9de6eedbe91 / branch-3.53 34171bee08 (2026-08-11, YEONBA)szLeaf<4, no este remanente