
SQLite 3.53.4 sqlite3_rsync - Alto - Remoto - RCE - Iniezione di comandi tramite nome file SSH
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-rsync-ssh
Classe: RCE (command injection) Portata: Remota (UI:R)
SQLite 3.53.4 (b09c88c) sqlite3_rsync racchiude USER@HOST:PATH tra virgolette per il locale /bin/sh -c. OpenSSH poi unisce con spazi gli argv remoti per la login shell senza quelle virgolette. Un punto e virgola, $(), un backtick o | nel PATH viene eseguito con l'UID remoto SSH. È un'utility, non libsqlite3. Lo stack smash readPow2 x>16 di Ada Logics è chiuso su questo pin.
| ID | nessuna CVE al momento |
| Classe | RCE (command injection con l'UID remoto SSH) |
| Portata | Remota (la vittima esegue sqlite3_rsync; UI:R) |
| CWE | CWE-78 |
| CVSS | High: 8.8 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H |
| Prodotto | SQLite utility sqlite3_rsync |
| Affetto | 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) |
| Auth | la vittima esegue sqlite3_rsync con un USER@HOST:PATH ostile |
| Licenza | GNU Affero GPL v3.0 |
| Lab | solo 127.0.0.1:18910. Echo witness. Nessuna reverse shell. |
Inserisci ;, $(), backtick o | nel percorso remoto di sqlite3_rsync USER@HOST:PATH. La vittima deve eseguire l'utility (UI:R). Il comando aggiuntivo viene eseguito con l'UID remoto SSH.
append_escaped_arg(..., 1) racchiude tra apici singoli per il locale /bin/sh -c. Quegli apici vengono consumati localmente. OpenSSH concatena gli argv rimanenti in un'unica stringa di comando remota. La login shell vede i metacaratteri senza virgolette.
Questo non è libsqlite3. Il sqlite3.c predefinito non include questo protocollo. Lo stack smash della replica di Ada Logics (cap dell'esponente readPow2) è già chiuso su 3.53.4.
Venti ricerche nel sorgente del tag SQLite version-3.53.4 dopo l'ondata FTS5 / session di 3.53.2. La libreria predefinita ha ancora altri residui (questo pacchetto è l'utility rsync). tool/sqlite3_rsync.c popen2 esegue /bin/sh -c. hostSeparator divide al primo due punti. Il valore di ritorno di append_escaped_arg non viene mai controllato.
Vicoli ciechi: considerare ancora aperto lo stack smash di Ada Logics; testare in laboratorio una reverse shell; parlare con un vero sshd; fissare la bozza 3.54.0; definire questa una RCE della libreria.
cd lab
./run.sh
Compila sqlite3_rsync dallo zip sorgente ufficiale 3.53.4. Il finto OpenSSH unisce gli argv dopo dest. Origin lab@host:;echo SQLITE-RSYNC-SSH-WITNESS>/work/sandbox/pwned.txt. Il comando remoto aveva ;echo senza virgolette. Bind su loopback.
SUCCESS sqlite-rsync-ssh how=openssh-argv-join dest=lab@host remote-has-semicolon=yes SQLITE-RSYNC-SSH-WITNESS
Codifica in esadecimale i nomi dei file inviati al peer (isFilename==2 / --encoded-filenames) come fa il trunk b0db2db (2026-10-07, ANT-2026-31X9HVRR) dopo questa GA. USER@HOST e --ssh restano con quoting sh locale. Non fare affidamento sul fatto che gli apici singoli locali sopravvivano alla concatenazione degli argv di OpenSSH.
b09c88c14082339b66c7b7158d609a771e64ca69)append_escaped_arg, popen2, argv SSH remoti ORIGIN/REPLICAb0db2db / Fossil eaec2f7f (2026-10-07)