OliveTin è un'interfaccia web self-hosted per esporre comandi shell predefiniti agli utenti finali. Questo repository contiene una proof-of-concept che dimostra due vettori indipendenti di iniezione di comandi del sistema operativo nel percorso di esecuzione della modalità Shell di OliveTin, entrambi i quali bypassano i controlli di sicurezza previsti dall'applicazione per gli argomenti della shell.
| ID CVE | CVE-2026-27626 |
| Componente | OliveTin |
| Classe di vulnerabilità | CWE-78: Neutralizzazione impropria degli elementi speciali utilizzati in un comando del sistema operativo |
| CVSS 3.1 | 9.9–10.0 (Critico) — AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H |
| Versioni affette | Tutte le versioni ≤ 3000.10.0 (commit precedenti a 0.0.0-20260222101908-4bbd2eab1532) |
| Versione corretta | 0.0.0-20260222101908-4bbd2eab1532 o successive |
| Avviso | GHSA-49gm-hh7w-wfvf |
| Divulgato | 2026-02-22 (avviso), 2026-02-25 (NVD) |
OliveTin è un'interfaccia web self-hosted per esporre comandi shell predefiniti agli utenti finali. Questo repository contiene una prova di concetto che dimostra due vettori indipendenti di iniezione di comandi del sistema operativo nel percorso di esecuzione della modalità Shell di OliveTin, entrambi che bypassano i controlli di sicurezza previsti dall'applicazione sugli argomenti della shell.
OliveTin consente a un amministratore di definire Azioni — comandi shell con argomenti parametrizzati — che utenti autenticati (o, a seconda della configurazione, anonimi) possono attivare da un'interfaccia web o tramite webhook. Per impedire agli utenti di uscire dal comando previsto tramite i valori degli argomenti, OliveTin esegue ogni argomento fornito dall'utente attraverso checkShellArgumentSafety() prima di inserirlo in una stringa di comando e passarlo a sh -c.
Questo è il confine di sicurezza che la vulnerabilità rompe. OliveTin distingue esplicitamente 'l'amministratore definisce il comando' da 'l'utente fornisce il valore' — il controllo di sicurezza esiste proprio affinché un utente non possa trasformare un valore di argomento in un modo per eseguire comandi arbitrari.
password non viene controllatocheckShellArgumentSafety() sanifica solo una lista consentita fissa di tipi di argomento:
func checkShellArgumentSafety(argType string, value string) bool {
dangerousTypes := []string{"string", "int", "bool", "choice"}
for _, dt := range dangerousTypes {
if argType == dt {
return sanitizeInput(value)
}
}
// BUG: "password" type not checked
return true // Assumes safe
}
password è un tipo di argomento documentato e previsto per accettare input utente sensibili — ma non è in dangerousTypes, quindi passa a return true non sanificato. Qualsiasi utente in grado di popolare un argomento di tipo password su un'azione in modalità Shell può iniettare metacaratteri della shell (;, |, `, $(), ecc.) che eseguono comandi arbitrari come utente del processo OliveTin.
La sfruttabilità qui è amplificata dalle impostazioni predefinite di OliveTin: l'auto-registrazione è abilitata e authType: none fuori dagli schemi, quindi in molte implementazioni reali 'utente autenticato' non richiede alcuna barriera reale.
Indipendentemente dal Vettore 1, il gestore webhook di OliveTin estrae coppie chiave/valore arbitrarie dal corpo JSON di un webhook in entrata e le inietta direttamente in ExecutionRequest.Arguments (service/internal/executor/handler.go:153-157).
Poiché queste chiavi derivate dal webhook non hanno un ActionArgument corrispondente definito nella configurazione dell'azione, parseActionArguments() (arguments.go) non trova alcun tipo di argomento da controllare e salta completamente checkShellArgumentSafety() — non solo per password, ma per ogni tipo. Il valore grezzo viene inserito nel comando shell e passato a sh -c senza alcuna validazione.
Poiché ricevere webhook in entrata da fonti esterne/non fidate è uno dei principali casi d'uso supportati da OliveTin, questo vettore non richiede alcuna autenticazione.
Un'istanza di OliveTin in esecuzione in modalità Shell con qualsiasi azione attivata da webhook è vulnerabile a esecuzione di codice remoto non autenticata, con i privilegi del processo OliveTin — potenzialmente compromissione totale dell'host a seconda di come OliveTin è distribuito (bare metal vs. container, capacità concesse, ecc.).
Sei probabilmente vulnerabile se la tua istanza di OliveTin:
password esposta a utenti non fidati/con privilegi inferiori (Vettore 1), oppurepython3 CVE-2026-27626.py -u <TARGET> [OPTIONS]
| Opzione | Descrizione | Predefinito |
|---|---|---|
-u, --url | Host/IP di destinazione | Obbligatorio |
-p, --port | Porta OliveTin | 1337 |
-x, --cmd | Comando da eseguire | id |
0.0.0-20260222101908-4bbd2eab1532 o successive non appena disponibile nel tuo canale di aggiornamento.password su qualsiasi azione raggiungibile da utenti non fidati.authType diverso da none).| Data | Evento |
|---|---|
| 2026-02-20 | CVE riservato |
| 2026-02-22 | Pubblicato l'avviso di sicurezza GitHub |
| 2026-02-25 | Pubblicazione NVD |
| 2026-02-27 | Avviso aggiornato |
Questa PoC è pubblicata esclusivamente per scopi di ricerca difensiva, ingegneria del rilevamento e test di penetrazione autorizzati. Non eseguirla su sistemi che non possiedi o per i quali non hai un'autorizzazione scritta esplicita per il test. L'uso improprio di questo codice contro sistemi di terze parti potrebbe violare le leggi sui crimini informatici (ad esempio, CFAA negli Stati Uniti, Computer Misuse Act nel Regno Unito e statuti equivalenti altrove) ed è di esclusiva responsabilità della persona che lo esegue.
Md Saikat (0xh7ml)