Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

FeedsContactoPrivacidad© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
sqlite-collate-depth — SQLite 3.53.4 - Alta - Local - Crash - La cadena COLLATE omite SQLITE_LIMIT_EXPR_DEPTH | Kitploit
Herramientas/GitHubGitHub/abraxas/sqlite-collate-depth
Análisis EstáticoAnálisis de VulnerabilidadesExplotaciónFuzzingSeguridad de Bases de Datos
GitHubabraxas/sqlite-collate-depth

sqlite-collate-depth

SQLite 3.53.4 - Alta - Local - Crash - La cadena COLLATE omite SQLITE_LIMIT_EXPR_DEPTH

Ver Repositorio
1hace 6 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Abraxas Labs - sqlite-collate-depth

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  sqlite-collate-depth

sqlite-collate-depth

Clase: Crash Alcance: Local

SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci

La acción gramatical COLLATE nunca llama a sqlite3ExprCheckHeight. sqlite3ExprAddCollateToken asigna un nodo TK_COLLATE con nHeight todavía en 1, y luego cuelga la expresión previa de pLeft. Los operadores ordinarios pasan por sqlite3PExpr y obtienen el SQLITE_LIMIT_EXPR_DEPTH documentado (por defecto 1000). Este operador no.

El walker sigue recursando en cada pLeft. EP_Skip es para afinidad, no para sqlite3WalkExprNN. Una cadena de 50 nodos devuelve 1. También 8k y 40k, más allá del límite de profundidad. 120k desborda la pila con ASan en sqlite3WalkExprNN (rc=134). No es RCE.

El árbol canónico es https://sqlite.org/src. GitHub sqlite/sqlite es un espejo de Fossil. Zip oficial sqlite-src-3530400. Biblioteca de dominio público. Este pack es AGPLv3.

IDsin CVE todavía
ClaseCrash (desbordamiento de pila con ASan en sqlite3WalkExprNN; RCE no demostrado)
AlcanceLocal (SQL no confiable o una VIEW plantada)
CWECWE-674, CWE-770
CVSSAlto: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
ProductoSQLite 3.53.4
Afectado3.53.4 (b09c88c); residuo de la comprobación de altura de COLLATE posterior en trunk
AuthSQL no confiable o VIEW; load_extension permanece desactivado por defecto
LicenciaGNU Affero GPL v3.0
Labsolo 127.0.0.1:18800. Amalgama con ASan. Testigo de crash.

Qué puede hacer un atacante

Introducir una larga cadena postfija COLLATE BINARY como SQL, o plantarla en una VIEW dentro de un .db no confiable. El proceso anfitrión recorre la cadena y muere en la pila de C. El límite documentado de profundidad de expresión nunca se ejecuta en este operador.

SELECT 1 COLLATE BINARY COLLATE BINARY ... es suficiente. La misma forma en CREATE VIEW v AS SELECT 1 COLLATE BINARY ... y luego SELECT * FROM v en una conexión nueva. El SQLITE_LIMIT_SQL_LENGTH por defecto (1e9) sostiene la cadena de ~1.8 MB que desbordó una pila de 8 MB en este lab.

Esto es un crash del proceso embebedor. No es control del puntero de instrucción. load_extension permanece desactivado.

Cómo lo encontré

Veinte búsquedas en el código fuente del tag version-3.53.4 de SQLite tras OpenLiteSpeed. Última GA, no el borrador 3.54.0. sqlite.org/security.html trata el SQL no confiable y los .db no confiables como de primera clase. load_extension está desactivado por defecto.

parse.y para COLLATE son tres líneas:

expr(A) ::= expr(A) COLLATE ids(C). {
  A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
}

sqlite3ExprAddCollateToken establece pNew->pLeft = pExpr y EP_Collate|EP_Skip. sqlite3ExprAlloc dejó nHeight = 1. Sin sqlite3ExprCheckHeight. sqlite3PExpr hace ambas cosas para cualquier otro operador binario.

Caminos equivocados: tratar 8k COLLATE como el crash (devolvió 1); tratar 40k como el crash (también devolvió 1, muy por encima de SQLITE_LIMIT_EXPR_DEPTH 1000); necesitar 120k antes de que ASan muriera en sqlite3WalkExprNN.

Este es el G1 de catorce residuos en el pin. Los hermanos son otras publicaciones.

Lab

cd lab
./run.sh

Amalgama con ASan del sqlite-src-3530400 oficial (clon de respaldo del tag version-3.53.4). Compose sqlite-collate-depth. HTTP dummy en 127.0.0.1:18800. Enlázalo a loopback.

SUCCESS sqlite-collate-depth how=asan-stack-overflow control=50 crash-n=120000 SQLITE-COLLATE-DEPTH-WITNESS

50 COLLATE devuelve 1. 8k y 40k también devuelven 1. 120k muere rc=134, desbordamiento de pila con ASan en sqlite3WalkExprNN. La comprobación del pin es SELECT sqlite_version() / SELECT sqlite_source_id().

La solución

Llamar a sqlite3ExprCheckHeight sobre el nodo COLLATE después de adjuntar pLeft, tal como ya hace sqlite3PExpr. Recalcular nHeight a partir del hijo. Un operador postfijo sigue siendo un árbol de expresión.

Trunk 252c0b7bf5 (2026-10-04) es posterior a esta GA.

Referencias

  • https://sqlite.org/src tag version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • https://github.com/sqlite/sqlite (espejo de Fossil) árbol https://github.com/sqlite/sqlite/tree/version-3.53.4
  • Zip oficial https://www.sqlite.org/2026/sqlite-src-3530400.zip
  • https://sqlite.org/security.html
  • src/parse.y acción COLLATE
  • src/expr.c sqlite3ExprAddCollateToken, sqlite3ExprAlloc (nHeight = 1), sqlite3PExpr / sqlite3ExprCheckHeight
  • src/walker.c sqlite3WalkExprNN
  • src/sqliteLimit.h SQLITE_MAX_EXPR_DEPTH por defecto 1000
  • CWE-674 Recursión no controlada
  • CWE-770 Asignación de recursos sin límites ni limitación
Descargar herramienta