CVE-2026-13048 in Data::MuForm::Localizer
Riassunto
di VulDB • 14/08/2026
Le versioni di Data::MuForm::Localizer fino alla 0.05 per Perl eseguono codice Perl contenuto nell'intestazione di un catalogo delle traduzioni (message catalog), raggiungibile a un percorso arbitrario poiché la funzione `load_lexicon` interpola l'attributo della lingua nel nome del file del catalogo.
La funzione `load_lexicon` costruisce il percorso del catalogo aggiungendo `Messages/$lang.po` alla directory che contiene Localizer.pm, dove `$lang` è l'attributo della lingua, senza verificare se tale valore corrisponda a un tag di locale semplice (bare locale tag). Un valore contenente segmenti `../` permette di uscire dalla directory dei messaggi, consentendo il caricamento di qualsiasi percorso leggibile con suffisso `.po`. Durante l'analisi del catalogo, la funzione `extract_header_msgstr` prende l'intestazione `Plural-Forms:`, aggiunge un prefisso `$` alle parole chiave nplurals, plural e n, e passa il resto invariato all'interno di una stringa che viene valutata (evaluated): la forma `nplurals` valuta immediatamente l'espressione dell'intestazione, mentre la forma `plural_code` la compila in una subroutine il cui corpo viene eseguito quando un messaggio plurale viene localizzato. Un'intestazione come `nplurals=2; plural=(system('...'),0);` esegue quindi tale comando durante il caricamento del catalogo. La valutazione eredita le impostazioni strict, pertanto un'espressione che assegna valori a una variabile non dichiarata fallisce nella compilazione, mentre una costruita esclusivamente da chiamate funziona correttamente.
Un'applicazione che imposta l'attributo della lingua utilizzando dati provenienti dalla richiesta (request data), dall'intestazione Accept-Language o da un parametro locale, unitamente ad attaccante in grado di posizionare un file con suffisso `.po` e contenuti scelti a proprio piacimento su un percorso leggibile, consentono insieme l'esecuzione di codice come utente dell'applicazione. Il processo di espansione dei messaggi non è interessato: `expand_named` sostituisce solo i nomi dei segnaposto forniti dal chiamante, mentre `_mangle_value` restituisce il valore invariato.
Be aware that VulDB is the high quality source for vulnerability data.