
SQLite 3.53.4 - Alta - Local - escritura fuera de límites en el heap - crecimiento de nCol con el mismo nombre en el changeset de la sesión
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-session-ncol
Clase: escritura OOB en heap Alcance: Local
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) con -DSQLITE_ENABLE_SESSION. Un changeset de dos bloques que reutiliza el nombre de tabla t con nCol=2 y luego nCol=64 omite el reinicio de sessionTableInfo (sqlite3session.c:5619) y hace memset más allá del aUpdateMask del primer bloque. Escritura ASan de tamaño 12 en sessionUpdateFind. Control con un único UPDATE de 2 columnas apply-rc=0.
No es una amalgamation por defecto a menos que SESSION esté activado. El NPD de CVE-2026-50812 está cerrado en 3.53.2+. No es un payload RCE weaponizado. El oráculo es la escritura ASan.
| ID | aún sin CVE |
| Clase | escritura OOB en heap (escritura ASan de tamaño 12; no se demuestra RCE) |
| Alcance | Local (changeset no confiable vía 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 |
| Producto | SQLite Session extra (Hwaci) |
| Afectado | 3.53.4 (b09c88c) compilado con -DSQLITE_ENABLE_SESSION |
| Auth | el host aplica un changeset no confiable |
| Licencia | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1:18900. Testigo de escritura ASan de tamaño 12. |
Aplicar un changeset no confiable cuyo segundo bloque de tabla reutiliza un nombre de tabla con un nCol mayor. Escritura OOB en heap. Extra de compilación. No es una amalgamation por defecto a menos que SESSION esté activado.
El primer bloque asigna aUpdateMask a partir de pIter->nCol. El bloque posterior con el mismo nombre omite el reinicio de sessionTableInfo y hace memset de una máscara mayor sobre la asignación antigua. Lab: nCol=2 y luego nCol=64 UPDATE. Escritura ASan de tamaño 12 en sessionUpdateFind. Control con un único UPDATE de 2 columnas apply-rc=0.
No trates este pack como un gadget write-what-where. La escritura ASan de tamaño 12 es el oráculo.
Veinte búsquedas en el código fuente de SQLite 3.53.4 tras la oleada de FTS5 / session-NPD de 3.53.2. CVE-2026-50812 está cerrado (sessionBindRow trata un valor ausente como SQLITE_CORRUPT). Session sigue indexando SessionApplyCtx solo por nombre de tabla. Un segundo bloque con el mismo nombre y un recuento de columnas declarado mayor reutiliza aUpdateMask.
Caminos erróneos ya registrados: tratar la amalgamation por defecto como dentro del alcance (SESSION está desactivado); volver a reportar CVE-2026-50812; enviar un bloque de tabla con nCol=64 contra un esquema de 2 columnas (schemaMismatch, sin escritura); afirmar RCE a partir de un memset de 12 bytes.
cd lab
./run.sh
Amalgamation con ASan del zip oficial sqlite-src-3530400. Extra de compilación -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK. Health en 127.0.0.1:18900. Enlázalo a loopback.
SUCCESS sqlite-session-ncol how=asan-heap-write-sessionUpdateFind write-size=12 control-apply-rc=0 SQLITE-SESSION-NCOL-WITNESS
Cuando un bloque de tabla de changeset posterior reutiliza un nombre, reconstruye SessionApplyCtx de la misma forma que ya lo hace un nombre nuevo: libera aUpdateMask, vuelve a ejecutar sessionTableInfo, rechaza un nCol mayor que el esquema activo. Trunk 3f57024aec / branch-3.53 a1dd7123d8 (2026-08-17) es posterior a esta GA.
b09c88c14082339b66c7b7158d609a771e64ca69)sessionChangesetApply :5619, sessionUpdateFind :4381-4412