// 1 CRITICAL · 11 ZERO-DAY · 9 CVE · 10 EXPLOIT NELLE ULTIME 24H
PoisonedRefresh infetta i server F5 BIG-IP APM sfruttando CVE-2025-53521 e nasconde la web shell solo in memoria, lasciando intatti i file su disco.

Il 7 settembre 2026 SophosLabs ha pubblicato l'analisi di PoisonedRefresh, un impianto Linux che colpisce i server F5 BIG-IP APM sfruttando la vulnerabilità CVE-2025-53521. Il malware non lascia tracce su disco: inietta la web shell direttamente nella memoria dei processi Apache, rendendo inutili tutti i sistemi di rilevamento basati sull'integrità dei file. Per i team di sicurezza si apre un problema nuovo: il patching del sistema non elimina l'impianto attivo, che continua a operare in RAM fino al riavvio del servizio.

Punti chiave
  • PoisonedRefresh, rilevato come Linux/Agnt-IC da Sophos, compromette server F5 BIG-IP APM sfruttando CVE-2025-53521, una RCE non autenticata con CVSS 9.8 CRITICAL secondo NVD.
  • Il malware intercetta le chiamate mmap() in libphp e inietta il payload nella rappresentazione in-memory di script PHP webtop, lasciando i file originali benigni su disco.
  • Un custom ELF loader garantisce esecuzione pre-main() riaprendo il binario via /proc/self/exe, con stringhe operative criptate tramite RC4 con chiave hardcoded di 16 byte.
  • Un secondo canale di accesso utilizza un socket UNIX domain locale a /run/bigtlog.pipe, con shell interattiva /bin/bash attivata tramite hook di apr_time_now.

Come funziona l'iniezione memory-only nei processi Apache

Il meccanismo centrale di PoisonedRefresh è il hooking runtime delle funzioni di libreria in libphp. Secondo l'analisi SophosLabs condivisa con GBHackers, il malware intercetta open, close, mmap e __fxstat nel modulo PHP di Apache. Quando il processo worker carica in memoria file PHP legittimi del webtop BIG-IP APM — specificamente apm_css.php3, full_wt.php3 e webtop_popup_css.php3 — il payload maligno viene iniettato durante la fase di mmap().

I file su disco rimangono inalterati e benigni. Il processo Apache esegue invece una versione modificata in memoria che legge comandi da php://input, verifica un prefisso magico, decripta il contenuto con RC4 e lo esegue tramite eval(). La risposta HTTP viene mascherata con status code 201 e Content-Type text/css; charset=utf-8, imitando traffico legittimo di fogli di stile.

Questo approccio annulla ogni controllo di integrità file-based. Come ha rilevato SophosLabs, citato da SecurityOnline: "The on-disk file does not need to contain the final web shell content at all; execution follows from the modified in-memory representation created by the implant at runtime".

Il custom ELF loader e la persistenza oltre il riavvio

Il campione analizzato, con hash SHA-256 26bd5b0722d1dbab5db749a063c49bc8638653ac2addfead7a9cb3d6d57bccc9, è un binario stripped e statically linked. Per nascondere la propria esecuzione, PoisonedRefresh implementa un loader ELF custom che intercetta __libc_start_main: il malware preserva la routine di startup libc originale, riapre il proprio eseguibile tramite /proc/self/exe, mappa al suo interno un eseguibile embedded e reindirizza l'esecuzione prima del normale avvio della libreria C.

Un'analisi parallela condotta da Sophos su un campione correlato nel binario umount ha rivelato un first-stage installer separato. Questo componente infetta /usr/sbin/httpd, si installa in /mnt/tm_install per sopravvivere agli upgrade del sistema, e modifica le politiche SELinux per eludere i controlli di sicurezza. Il prefisso maligno di dimensione 0x5430 nel httpd infettato corrisponde al payload embedded nel campione umount, confermando la relazione tra i due componenti.

"Our analysis suggests the sample discussed here represents a second-stage payload; during parallel analysis of a related umount sample, we noted a distinct installer/propagation component" — SophosLabs

Il doppio canale di accesso: web shell HTTP e socket UNIX domain

PoisonedRefresh non si affida a un unico vettore di comando. Oltre alla web shell iniettata via PHP, il malware crea un socket UNIX domain locale a /run/bigtlog.pipe. L'attivazione avviene tramite un hook su apr_time_now, funzione di Apache Portable Runtime: quando viene soddisfatta una condizione di autenticazione, lo standard input, output e error vengono reindirizzati a /bin/bash, aprendo una shell interattiva locale.

Il socket UNIX domain richiede accesso già compromesso al sistema o la presenza di un altro vettore di accesso locale. Non è esposto direttamente alla rete, ma rappresenta un percorso di persistenza alternativo qualora la web shell HTTP venisse rilevata e neutralizzata. La combinazione dei due canali — uno mimetizzato nel traffico web, l'altro nascosto nel filesystem dei socket locali — rende la completa eradicazione particolarmente complessa.

CVE-2025-53521: la falla di ingresso e il contesto della campagna c05d5254

La vulnerabilità sfruttata per l'accesso iniziale è CVE-2025-53521, una RCE non autenticata in F5 BIG-IP APM con access policy configurata su virtual server. Secondo NVD, il punteggio CVSS 4.0 è AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N. La vulnerabilità è presente nelle branch 15.1.x, 16.1.x, 17.1.x e 17.5.x; le versioni corrette sono 15.1.10.8, 16.1.6.1, 17.1.3 e 17.5.1.3.

F5 ha confermato lo sfruttamento in-the-wild di questa vulnerabilità e ha collegato l'attività alla campagna tracciata internamente come c05d5254. Il record CVE è inserito nel catalogo CISA Known Exploited Vulnerabilities. ESET ha analizzato indipendentemente lo stesso malware, confermando la denominazione 'PoisonedRefresh' e riscontrando comportamenti sovrapposti a quelli documentati da Sophos.

Cosa fare adesso

  • Eseguire compromise assessment sui server BIG-IP APM già patchati: l'impianto memory-only sopravvive all'applicazione delle correzioni e richiede verifica della memoria dei processi Apache, non solo dell'integrità dei file su disco.
  • Monitorare anomalie comportamentali nei processi Apache worker: fluttuazioni nei permessi di memoria di libphp, accessi ripetuti a /proc/self/maps da parte di processi httpd, e pattern di allocazione mmap anomali su file PHP del webtop.
  • Analizzare la telemetry HTTP per risposte con status code 201 su endpoint PHP che dovrebbero restituire altri codici, in particolare quando accompagnate da Content-Type text/css su risorse dinamiche.
  • Verificare la presenza di socket UNIX domain non documentati in /run/, in particolare percorsi con nome bigtlog.pipe o similari, e controllare processi Apache con file descriptor aperti verso shell interattive.

Perché cambia tutto nella rilevazione delle web shell

PoisonedRefresh segna una discontinuità nella catena di rilevazione delle compromissioni web. Fino a oggi le web shell erano per definizione artefatti su disco: file PHP anomali, timestamp sospetti, firme statiche nei contenuti. Il malware di Sophos dimostra che questo modello è superato. Quando il payload risiede esclusivamente in pagine di memoria mappate via mmap e scompare con il riavvio del processo, l'intera categoria di strumenti disk-centric — EDR con scanning file-based, integrity monitoring su filesystem, sandboxing statica — perde efficacia senza compensazione in visibility alternativa.

Il passaggio richiesto è tecnico e organizzativo. I team devono integrare detection su memoria di processo, syscall tracing e behavioral analytics HTTP, con costi in strumentazione e competenze che molte organizzazioni non h ancora distribuito. Per i vendor di sicurezza, la sfida è aggiornare le logiche di rilevamento per il hooking runtime di librerie condivise, un dominio finora riservato alla ricerca su rootkit avanzati e che ora entra nel threat model ordinario dei server di perimetro.

Fonti

Le informazioni sono state verificate sulle fonti citate e aggiornate al momento della pubblicazione.

Fonti


Fonti e riferimenti
  1. gbhackers.com
  2. itsecuritynews.info
  3. infosectoday.io
  4. securityonline.info
  5. kobaran.com
  6. nvd.nist.gov
  7. sophos.com