Un mese di ingegneria della sicurezza dell'ecosistema
Il mese scorso vi ho raccontato che la PHP Foundation ha ottenuto un grant da Alpha-Omega tramite la Linux Foundation per contribuire a migliorare la sicurezza dell'ecosistema open source PHP, e che sta formando un nuovo Ecosystem Security Team. Oggi voglio aggiornarvi sui progressi fatti finora.
Dopo un breve periodo di setup, mi sono dedicato a tre attività principali:
- valutare le esigenze più urgenti dei membri della community PHP
- mettere insieme un team di volontari per dare una mano
- utilizzare le risorse ottenute per scansionare i progetti dell'ecosistema PHP
Il setup ha incluso l'avvio della costruzione di toolchain collaborative, la garanzia di accesso a budget e modelli per la scansione, la definizione delle nostre metriche di reporting e l'individuazione di modalità efficaci per distribuire le vulnerabilità di sicurezza rilevate e supportare i maintainer.
Finora abbiamo parlato con 35 maintainer di progetti delle nostre attività di scansione e delle preoccupazioni che hanno in materia di sicurezza. Abbiamo condiviso centinaia di potenziali vulnerabilità di sicurezza, che hanno già portato a quasi un centinaio di fix pubblicamente disponibili in tutto l'ecosistema, oltre a molte conversazioni utili e di grande valore.
Inoltre ci sono stati fix di massa della stessa segnalazione su molti repository. Per esempio, in un caso circa 200 repository hanno applicato lo stesso fix alle proprie GitHub Actions, dato che sono gestiti tramite un template centrale. Non volevo gonfiare i numeri, quindi questi casi sono conteggiati come un singolo fix.
In totale, abbiamo scansionato e riscansionato oltre 300 tra i pacchetti Composer più scaricati e quasi tutti i grandi framework. Ci siamo messi in contatto con i rispettivi maintainer o abbiamo trovato persone disponibili a intervenire per aiutare a risolvere le vulnerabilità di sicurezza dove ce n'era bisogno.
Voglio ringraziare personalmente Graham Campbell, che è stato di grande aiuto per farmi partire con idee e con la validazione iniziale delle issue nei primi giorni del mio nuovo ruolo e che ha continuato a essere disponibile e di supporto nella risoluzione di problemi in altri progetti.
Attività in corso
La scansione dei progetti alla ricerca di vulnerabilità di sicurezza prosegue a ritmo costante per sfruttare al meglio le risorse che ci sono state fornite. Non ci limitiamo a cercare vulnerabilità, ma aiutiamo anche nel triage, nella riproduzione dei problemi, nell'analisi dell'impatto e, dove necessario, forniamo fix sfruttando il nostro accesso ai modelli di AI e alle loro estese capacità "Cyber".
Continuerò a parlare con chiunque si rivolga a me, garantendo al contempo un flusso costante di comunicazione pubblica sulle nostre attività.
Tutti i maintainer che si sono rivolti a me finora sono stati così gentili da offrirsi di validare personalmente le segnalazioni generate. Ho potuto concentrarmi principalmente sulla generazione di reproducer, lasciando agli esperti il compito di stabilire se una determinata segnalazione rappresenta un problema di sicurezza, un bugfix o un report non valido. In questi casi i maintainer hanno gestito le proprie segnalazioni e la divulgazione secondo i propri termini e in modo compatibile con le loro tempistiche.
Sono personalmente entusiasta della grande risposta della community, sia in termini quantitativi che qualitativi: quasi tutti sono stati di supporto e ho riscontrato solo un'interazione negativa con un maintainer e una persona con cui stiamo ancora cercando di metterci in contatto. Non potrei essere più soddisfatto della maturità, della disponibilità e della cordialità della community in senso ampio. Non mi aspettavo nulla di diverso da PHP, ma è bello vedere confermate le proprie aspettative.
Tooling condiviso: Scrutineer
Quando si scansionano molti progetti ci troviamo di fronte a diverse sfide: ottenere output riproducibili e affidabili, evitare falsi positivi e usare le nostre risorse in modo efficace senza duplicare il lavoro, il tutto consentendo a ogni persona che scansiona di eseguire più agenti in parallelo senza interazione umana durante il processo di scansione iniziale. L'analisi di sicurezza deve essere eseguita in ambienti containerizzati isolati che mantengano sicura l'infrastruttura che utilizziamo per la scansione.
Per unire i nostri sforzi, stiamo lavorando con gli Ecosystem Security Engineers di altri linguaggi e con il team di Alpha-Omega su tooling condiviso a questo scopo. In particolare stiamo collaborando a Scrutineer. Voglio rivolgere un ringraziamento speciale ad Alexandre Daubois di Les-Tilleuls.coop. I suoi contributi a Scrutineer sono stati molto preziosi per consentire a più persone di scansionare efficacemente i progetti PHP.
Scrutineer consente risultati più strutturati e un processo di reporting più semplice. Aiuta inoltre a permettere a persone con accesso a modelli di AI diversi, altrimenti non disponibili, o con accesso a maggiori capacità di risorse, di scansionare progetti per nostro conto. Usando Scrutineer possiamo adattare i container usati per l'analisi all'ecosistema PHP, migliorando la qualità dei risultati di scansione grazie a tooling per creare e validare reproducer. Senza efficaci cicli di feedback automatizzati, la qualità dei report sarebbe drasticamente inferiore e richiederebbe molto più lavoro di pulizia.
Aiutare i progetti con approcci individuali
Aiutiamo i progetti e i maintainer a digerire i report, creare reproducer, deduplicare le vulnerabilità di sicurezza rilevate e suggerire e validare i fix.
Quando ho accettato il mio nuovo ruolo, non ero sicuro di quanti progetti si sarebbero rivolti a noi per un aiuto con queste attività. Ho ricevuto feedback secondo cui la qualità dei report che i maintainer ricevono è aumentata in modo significativo negli ultimi mesi. Quindi non ho ricevuto molte richieste di assistenza nell'elaborazione dei report e dei fix proposti. Molti maintainer riferiscono di usare i propri agenti di coding per validare e riprodurre efficacemente le vulnerabilità di sicurezza ricevute. Ma per alcune problematiche più complesse, i modelli di AI attualmente disponibili non riescono ad aiutare, o rifiutano di aiutare, a lavorare su un exploit per una potenziale vulnerabilità. In questi casi posso essere d'aiuto.
A volte la scansione automatizzata non produce risultati chiari, oppure il threat modeling o i vettori di attacco non sono abbastanza definiti. In questi casi passo del tempo con ciascun progetto per capire meglio cosa dovrebbero valutare i modelli di AI e indirizzarli in quella direzione.
Una menzione speciale va al progetto PHP stesso: molte persone amano provare i propri nuovi strumenti di sicurezza su PHP, data la sua popolarità. La complessità intrinseca del runtime di un linguaggio di programmazione comporta risultati di qualità significativamente inferiore dagli approcci di sicurezza agentici. I report che il progetto PHP riceve sono più difficili da digerire rispetto a quelli delle librerie PHP userland, che hanno un threat model e una superficie di attacco più chiari.
Finora, per mancanza di tempo, non sono ancora riuscito ad aiutare molto PHP stesso. Ho intenzione di lavorare molto di più sul core di PHP nei prossimi mesi. La comunicazione con il team di sviluppatori del core di PHP è ottima e non vedo l'ora di iniziare davvero e vedere dove posso essere loro d'aiuto.
Mettere insieme un team
Sono stato felice di vedere che la PHP Foundation sta lanciando i Community Special Interest Groups. Uno di questi è l'Ecosystem Security Team, che la PHP Foundation desidera sostenere ben oltre i 6 mesi del finanziamento iniziale del grant, perciò ho iniziato a mettere insieme un team attorno a queste attività di sicurezza e supporto ai maintainer.
Se volete mettervi in contatto e parlare di sicurezza con persone che la pensano come voi, potete trovare alcuni di noi nel canale #ecosystem-security sul Discord di phpc. La PHP Community Foundation è stata così gentile da creare un canale per noi e per #the-php-foundation in generale. Lì sono "@edorian", se volete salutare.
Per argomenti delicati, potete sempre mettervi in contatto direttamente con me.
Oltre ad Alexandre, che ho già menzionato sopra, un nome che ho incontrato spesso parlando con i maintainer è stato quello di Ilia Alshanetsky. Ilia ha svolto molto lavoro indipendente e gli ho chiesto di unirsi all'Ecosystem Security Team, così possiamo coordinare meglio i nostri sforzi.
Prospettive future
Gli obiettivi che mi sono posto per il prossimo mese sono:
- Scansionare altri 250 progetti e segnalare tutte le vulnerabilità raccolte
- Eseguire un'analisi dedicata e più approfondita dei progetti e delle librerie core
- Dedicare più tempo ad aiutare con le issue di php-src e delle estensioni PHP
Continuerò a essere disponibile ad aiutare i maintainer di qualsiasi progetto che si rivolgano a noi.
Contattaci
Per ripetere quanto già detto sopra: abbiamo capacità per scansionare e aiutare più maintainer.
Discord: #ecosystem-security sul server della community #phpc (Invito)
Email: [email protected]
Altri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.