Creșterea rapidă a tehnologiei a creat o cerere mare de dezvoltatori calificați. Software-ul open-source (OSS) a devenit un instrument vital pentru această forță de muncă în creștere. În prezent, există sute de mii de pachete OSS bine stabilite în diferite limbaje de programare. Peste 90% dintre dezvoltatori utilizează aceste componente open-source în cadrul aplicațiilor lor proprietare, ceea ce evidențiază eficiența și valoarea propusă de OSS. Subliniind și mai mult importanța sa, se preconizează că piața globală a software-ului open-source va ajunge la 80,7 miliarde de dolari până în 2030, reflectând o rată de creștere anuală de 16,7%.
Software face parte integrantă din operațiunile de afaceri din întreaga lume și, prin urmare, este frecvent vizat de actorii amenințători. În 2023, cheltuielile pentru securitatea aplicațiilor au fost de aproximativ 5,76 miliarde de dolari, cu proiecții care ajung la 6,67 miliarde de dolari în 2024. În cadrul AppSec, securitatea lanțului de aprovizionare cu software a câștigat proeminență în ultimii trei ani, reprezentând categoria de atacuri cu cea mai rapidă creștere, cu breșe și exploatări majore care apar regulat pe prima pagină a ziarelor.
Organizațiile presupun adesea că majoritatea riscurilor provin de la aplicațiile web destinate publicului. Cu toate acestea, această perspectivă s-a schimbat în ultimii ani. Cu zeci de componente mici în fiecare aplicație, riscurile pot apărea acum de oriunde din baza de cod. Este mai important ca niciodată ca organizațiile să se familiarizeze cu deficiențele de securitate existente și emergente în ciclul de viață al dezvoltării software. În această postare pe blog, bursierii noștri absolvenți oferă o privire mai atentă la CVE-2023-23924, o eroare de securitate critică descoperită în biblioteca dompdf utilizată pe scară largă - un instrument PHP puternic care permite generarea dinamică a documentelor PDF din HTML și CSS.
Printr-o analiză cuprinzătoare, vom explora complexitatea tehnică a acestei vulnerabilități, tehnologiile conexe care joacă un rol crucial și o simulare a procesului de exploatare. De asemenea, vom examina modul în care OPSWAT MetaDefender Core, în special Software Bill of Materials (SBOM) poate fi utilizat pentru detectarea și atenuarea acestei vulnerabilități, permițând dezvoltatorilor de software și echipelor de securitate să rămână cu un pas înaintea potențialelor amenințări.
Context privind CVE-2023-23924
O vulnerabilitate de securitate a fost descoperită în dompdf versiunea 2.0.1 și făcută publică la începutul anului 2023:
- Validarea URI pe dompdf 2.0.1 poate fi ocolită la analizarea SVG prin trecerea
<image>
cu litere majuscule. Acest lucru permite unui atacator să apeleze URL-uri arbitrare cu protocoale arbitrare, ceea ce duce la neserializarea arbitrară a obiectelor în versiunile PHP anterioare versiunii 8.0.0. Prin intermediul wrapper-ului URL PHAR, această vulnerabilitate poate cauza ștergerea arbitrară a fișierelor și chiar executarea codului de la distanță, în funcție de clasele disponibile. - Analiștii NVD au atribuit un scor CVSS de 9.8 CRITICAL pentru CVE-2023-23924.
Înțelegerea vulnerabilității Dompdf
Pentru a înțelege pe deplin vulnerabilitatea CVE-2023-23924 în dompdf, este esențial să ne familiarizăm cu două tehnologii strâns legate: grafica vectorială scalabilă (SVG) și fișierele PHAR.
SVG (Scalable Vector Graphics) este un format de imagine versatil care a câștigat popularitate datorită capacității sale de a reda grafică de înaltă calitate pe web, rămânând în același timp ușor și scalabil. Spre deosebire de imaginile raster, SVG-urile se bazează pe marcajul XML, permițând un control precis asupra elementelor precum liniile, formele și textul. Unul dintre principalele avantaje ale SVG-urilor este capacitatea lor de a se scala fără probleme, fără a pierde calitatea imaginii, ceea ce le face ideale pentru designul web receptiv și afișajele de înaltă rezoluție.
PHAR (PHP Archive) este analog cu conceptul de fișier JAR, dar pentru PHP. Acesta permite o implementare ușoară prin gruparea întregului cod PHP și a fișierului de resurse într-un singur fișier arhivă.
Un dosar PHAR este format din 4 secțiuni:
- Stubs: conține codul de bootstrap pentru arhivă.
- Manifest: conține metadatele arhivei. Metadatele sunt stocate în format serializat, care ar putea fi utilizat pentru a declanșa un atac PHP deserializat într-un fișier PHAR malițios.
- Conținutul fișierului: conține conținutul arhivei, inclusiv codul PHP, fișierele de resurse.
- Signature (Opțional): conține date pentru verificarea integrității fișierului.
Datorită faptului că metadatele sunt stocate în format serializat, combinația dintre wrapper-ul PHAR și metadatele fișierului PHAR ar putea declanșa un atac de deserializare atunci când sunt utilizate ca intrare în funcții PHP precum file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(),
sau dimensiune fișier()
. Această deficiență de securitate ar putea permite atacatorilor să execute cod de la distanță prin intermediul unui fișier PHAR.
Cum generează Dompdf un fișier PDF
Prin analiză, OPSWAT Graduate Fellows identifică trei etape în timpul procesului de conversie pe dompdf. Pentru a converti un fișier HTML în format PDF, biblioteca dompdf analizează mai întâi fișierul de intrare într-un arbore DOM și stochează informațiile de poziționare și aspect ale fiecărui obiect. Apoi, stilizarea CSS este analizată și aplicată fiecărui obiect. În cele din urmă, obiectele sunt reorganizate pentru a se potrivi pe pagină și redate în fișierul PDF final.
Pentru a spori securitatea, dompdf implementează validarea pentru a asigura siguranța intrărilor URI înainte de a trece la pasul următor. Acest proces de validare este evident în timpul procesării fișierului SVG în cadrul valorii xlink:href
atribut.
Dacă fișierul de intrare SVG conține <image>
sub tag-ul <svg>
este implementată o condiție pentru a permite numai anumite protocoale, cum ar fi http://
, https://
și file://
, pentru xlink:href
domeniu.
The resolve_url()
va valida URI-ul înainte de a-l procesa cu funcția drawImage()
funcție. În cazul în care schema din URI nu se numără printre protocoalele permise, funcția resolve_url()
va returna o excepție către aplicație.
Dacă URI trece de validare, acesta va fi transmis către drawImage()
care utilizează funcția file_get_contents()
pentru a gestiona valoarea URI în cadrul funcției xlink:href
atribut. Vulnerabilitatea de securitate apare în acest punct: un atac de deserializare PHAR ar putea fi declanșat dacă un atacator ar putea ocoli validarea și ar trece un wrapper PHAR în URI.
În urma analizei, s-a descoperit că validarea este aplicată numai etichetelor cu imaginea numelui exact.
În consecință, aceasta poate fi ușor ocolită prin scrierea cu majuscule a unuia sau mai multor caractere din numele etichetei, cum ar fi Image. Ca urmare, un fișier SVG special creat care utilizează Image în loc de image ar putea eluda această validare.
În etapa următoare, drawImage()
este invocată, trecând URI-ul din fișierul SVG la funcția file_get_contents()
funcție. Prin urmare, combinația dintre ocolirea validării și un atac de deserializare asupra unui fișier PHAR permite unui atacator să efectueze o execuție de cod la distanță. Această vulnerabilitate deschide calea unui atacator rău intenționat de a compromite serverul de aplicații prin intermediul unui fișier SVG dacă acesta este gestionat de o versiune vulnerabilă a dompdf.
Simularea exploatării Dompdf
Pentru a simula această exploatare ca un scenariu real, OPSWAT Graduate Fellows a dezvoltat o aplicație web care permite conversia HTML în PDF utilizând biblioteca dompdf versiunea 2.0.1. Această aplicație permite utilizatorilor să încarce tipuri de fișiere precum HTML, XML sau SVG și apoi să le convertească în fișiere PDF.
Un atacator va urma acești pași pentru a exploata această vulnerabilitate într-o aplicație care utilizează o versiune dompdf vulnerabilă (versiunea 2.0.1):
În primul rând, un atacator generează un obiect malițios care creează un reverse shell atunci când este apelat distructorul.
În al doilea rând, atacatorul creează un fișier PHAR care conține obiectul de metadate malițios. Atunci când fișierul PHAR este invocat de wrapper-ul PHAR în file_get_content()
metadatele sunt deserializate și obiectul specificat este procesat. În timpul acestui proces de deserializare, se declanșează destructorii și se execută shell-ul invers.
În cele din urmă, atacatorul integrează link-ul URI care conține wrapper-ul PHAR în valoarea xlink:href
în tag-ul Image pentru a ocoli validarea, a executa cod malițios și a încărca acest fișier malițios în aplicație.
În timpul procesării fișierului SVG malițios încărcat, aplicația stabilește o conexiune inversă cu atacatorul, permițându-i acestuia să compromită serverul aplicației.
Securizarea componentelor Open-source cu OPSWAT MetaDefender Core
Pentru a detecta și a atenua vulnerabilitatea CVE-2023-23924 din dompdf, bursierii noștri au utilizat OPSWAT MetaDefender Core , un produs de securitate cibernetică pe mai multe niveluri care oferă tehnologii avansate de prevenire și detectare a programelor malware, inclusiv SBOM.
OPSWAT SBOM securizează lanțul de aprovizionare cu software prin furnizarea unui inventar cuprinzător al componentelor pentru codul sursă și containere. Analizând biblioteca dompdf și dependențele acesteia, OPSWAT SBOM poate identifica rapid prezența versiunii vulnerabile 2.0.1 și poate alerta utilizatorii cu privire la riscul potențial.
În plus, OPSWAT SBOM poate detecta tehnologii conexe, precum fișierele SVG și PHAR, care sunt esențiale pentru înțelegerea și atenuarea vulnerabilității CVE-2023-23924. Această viziune holistică a componentelor software ale aplicației permite echipelor de securitate să ia decizii în cunoștință de cauză și să întreprindă acțiuni adecvate pentru a aborda riscurile identificate.
Dincolo de detectarea versiunii vulnerabile dompdf, OPSWAT SBOM oferă, de asemenea, informații valoroase cu privire la componentele afectate, versiunile acestora și orice actualizări sau patch-uri disponibile. Aceste informații permit echipelor de securitate să își prioritizeze eforturile de remediere și să se asigure că aplicația este actualizată la o versiune sigură a dompdf, abordând în mod eficient vulnerabilitatea CVE-2023-23924.
Prin utilizarea motorului SBOM din cadrul MetaDefender Core , organizațiile își pot monitoriza proactiv lanțul de aprovizionare cu software, pot identifica vulnerabilitățile potențiale ale componentelor open-source și pot implementa strategii de atenuare în timp util, asigurând securitatea și integritatea generală a aplicațiilor lor.
Gânduri de încheiere
Descoperirea CVE-2023-23924 în biblioteca dompdf subliniază nevoia critică de vigilență în peisajul dinamic al securității aplicațiilor. Prin valorificarea cunoștințelor și strategiilor prezentate în această postare pe blog, echipele de securitate pot detecta, atenua și proteja eficient aplicațiile lor împotriva unor astfel de vulnerabilități, asigurând securitatea și integritatea generală a ecosistemului lor software.