
CVE-2022-25314 exploit per Expat XML parser (AOSP 10 r33). Dimostra una vulnerabilità di buffer over-read nella libreria di parsing XML, consentendo sfruttamento mirato e test di sicurezza.
Questo è Expat, una libreria C per il parsing di XML, avviata da James Clark nel 1997. Expat è un parser XML orientato al flusso. Ciò significa che è possibile registrare gestori (handlers) con il parser prima di avviare il parsing. Questi gestori vengono chiamati quando il parser scopre le strutture associate nel documento in fase di parsing. Un tag di apertura è un esempio del tipo di strutture per cui è possibile registrare gestori.
Gli utenti Windows dovrebbero usare il
pacchetto expat_win32,
che include sia librerie precompilate che eseguibili, e il codice sorgente per
gli sviluppatori.
Expat è software libero.
È possibile copiarlo, distribuirlo e modificarlo secondo i termini della Licenza
contenuta nel file
COPYING
distribuito con questo pacchetto.
Questa licenza è la stessa della licenza MIT/X Consortium.
Se si sta compilando Expat da un checkout del repository Git, è necessario eseguire uno script che genera lo script configure utilizzando gli strumenti GNU autoconf e libtool. Per fare ciò, è necessario avere autoconf 2.58 o successivo. Eseguire lo script in questo modo:
./buildconf.sh
Una volta fatto ciò, seguire le stesse istruzioni della compilazione da una distribuzione sorgente.
Per compilare Expat da una distribuzione sorgente, eseguire prima lo script di shell di configurazione nella directory di livello superiore della distribuzione:
./configure
Ci sono molte opzioni che si possono fornire a configure (che si possono
scoprire eseguendo configure con l'opzione --help). Ma quella di
maggior interesse è quella che imposta la directory di installazione.
Per impostazione predefinita, lo script configure imposterà le cose per installare
libexpat in /usr/local/lib, expat.h in /usr/local/include, e
xmlwf in /usr/local/bin. Se, ad esempio, si preferisce installare
in /home/me/mystuff/lib, /home/me/mystuff/include, e
/home/me/mystuff/bin, è possibile comunicarlo a configure con:
./configure --prefix=/home/me/mystuff
Un'altra opzione interessante è abilitare il supporto per interi a 64 bit per i numeri di riga e colonna e l'indice di byte complessivo:
./configure CPPFLAGS=-DXML_LARGE_SIZE
Tuttavia, una tale modifica sarebbe un cambiamento che rompe l'ABI e quindi non è raccomandata per l'uso generale — ad esempio come parte di una distribuzione Linux — ma piuttosto per build con requisiti speciali.
Dopo aver eseguito lo script configure, il comando make compilerà
le cose e make install le installerà nella loro posizione
appropriata. Dare un'occhiata al Makefile per conoscere ulteriori
opzioni di make. Notare che è necessario avere il permesso di scrittura nelle
directory in cui verranno installati i file.
Se si è interessati a compilare Expat per fornire informazioni sul
documento in codifica UTF-16 invece del UTF-8 predefinito, seguire
queste istruzioni (dopo aver eseguito make distclean).
Si noti che configuriamo con --without-xmlwf poiché xmlwf non supporta
ancora questa modalità di compilazione:
Applicare una patch massiva ai file Makefile.am per usare libexpatw.la come nome della libreria:
find -name Makefile.am -exec sed -e 's,libexpat\.la,libexpatw.la,' -e 's,libexpat_la,libexpatw_la,' -i {} +
Eseguire automake per riscrivere i file Makefile.in:
automake
Per output UTF-16 come unsigned short (e stringhe di versione/errore come char),
eseguire:
./configure CPPFLAGS=-DXML_UNICODE --without-xmlwf
Per output UTF-16 come wchar_t (incluse stringhe di versione/errore), eseguire:
./configure CFLAGS="-g -O2 -fshort-wchar" CPPFLAGS=-DXML_UNICODE_WCHAR_T --without-xmlwf
Nota: Quest'ultimo richiede libc compilata con -fshort-wchar, così come.
Eseguire make (che esclude xmlwf).
L'uso di DESTDIR è supportato. Funziona come segue:
make install DESTDIR=/path/to/image
sovrascrive il DESTDIR impostato nel makefile, perché la priorità di impostazione delle variabili è
Nota: Questo si applica solo alla libreria Expat stessa; la compilazione di versioni UTF-16 di xmlwf e dei test non è attualmente supportata.
Quando si utilizza Expat con un progetto che usa autoconf per la configurazione, è
possibile usare la macro di probing in conftools/expat.m4 per determinare come
includere Expat. Vedere i commenti all'inizio di quel file per maggiori
informazioni.
Un manuale di riferimento è disponibile nel file doc/reference.html in questa
distribuzione.
Eseguire make install (di nuovo, esclude xmlwf).