Home Homebrew Rilasciato zftpd v1.4.0: il server FTP per PS4 e PS5 diventa più...

Rilasciato zftpd v1.4.0: il server FTP per PS4 e PS5 diventa più veloce e introduce una nuova dashboard web

121
0

Nella scena homebrew della console PlayStation 5 esistono progetti che nel tempo diventano veri e propri strumenti indispensabili, e zftpd è senza dubbio uno di questi.

Creato dallo sviluppatore Seregon, questo server FTP estremamente leggero è scritto interamente in linguaggio C ed è stato progettato con un obiettivo molto preciso: offrire trasferimenti di file velocissimi mantenendo allo stesso tempo un codice pulito, efficiente e privo di componenti superflui.

Alla base del progetto c’è una filosofia molto semplice: massimizzare le prestazioni riducendo al minimo il consumo di risorse. Zftpd è infatti un daemon FTP zero-copy, progettato per evitare copie inutili dei dati tra kernel e spazio utente.

Su sistemi come Linux, BSD e macOS sfrutta la funzione sendfile(), una tecnica che consente di trasferire i file direttamente dal filesystem alla rete senza passaggi intermedi.

Questo approccio permette di ottenere prestazioni molto elevate con un impatto minimo sulla CPU, un aspetto fondamentale soprattutto quando il software gira su hardware limitato come quello delle console.

In condizioni ideali, utilizzando una connessione cablata Gigabit Ethernet, zftpd riesce a saturare completamente la banda disponibile.

I trasferimenti possono raggiungere velocità di circa 110–112 MB al secondo in download e oltre 108 MB al secondo in upload, risultati impressionanti se si considera che il server gira semplicemente come payload su console come PlayStation 5, PlayStation 4 e persino PlayStation 3.

Uno dei punti di forza del progetto è proprio la sua natura multipiattaforma: lo stesso codice sorgente viene utilizzato su Linux, macOS e sulle console Sony, garantendo una base solida e facilmente mantenibile.

Sulle piattaforme PlayStation il server può essere caricato come file ELF o BIN utilizzando diversi exploit e strumenti della scena homebrew, tra cui GoldHEN, etaHEN o l’exploit PPPwn.

Questo significa che non sono necessari plugin complessi o installazioni invasive: basta avviare il payload tramite il proprio loader preferito per avere immediatamente a disposizione un server FTP stabile e veloce.

Con il passare delle versioni il progetto ha continuato a evolversi, introducendo nuove funzionalità senza sacrificare la sua leggerezza.

Una delle innovazioni più interessanti è stata l’introduzione di ZHTTP, un file explorer web integrato che ha cambiato radicalmente il modo in cui gli utenti interagiscono con i file della console.

Fino alle versioni precedenti era necessario utilizzare un client FTP tradizionale come FileZilla o WinSCP per accedere al filesystem della console.

Con ZHTTP, invece, è sufficiente avviare il server, leggere l’indirizzo IP mostrato a schermo e aprire il browser digitando l’indirizzo della console seguito dalla porta dedicata.

In pochi istanti si accede a un’interfaccia web semplice ma molto pratica, dalla quale è possibile navigare tra le cartelle del sistema, scaricare file con un semplice clic, visualizzare anteprime di immagini o file di testo e, se la funzione è stata abilitata in fase di compilazione, anche caricare file direttamente dal browser.

L’esperienza ricorda da vicino quella offerta da un NAS domestico e rende l’accesso ai dati della console molto più immediato, soprattutto da dispositivi mobili come smartphone o tablet.

Con la nuova versione 1.4.0 il progetto compie un ulteriore salto di qualità introducendo miglioramenti importanti sotto diversi aspetti, a partire dalle prestazioni.

Il sistema di download HTTP ora sfrutta completamente il meccanismo zero-copy anche per l’interfaccia web, utilizzando sendfile per eliminare copie di buffer inutili e aumentare la velocità di trasferimento.

Sono stati inoltre introdotti meccanismi intelligenti per gestire i blocchi del page cache su filesystem come exFAT presenti su PS4 e PS5, evitando rallentamenti improvvisi durante i trasferimenti.

Il server ora è in grado di adattarsi automaticamente ai diversi filesystem utilizzati dalle console, disabilitando alcune funzioni quando potrebbero causare instabilità o addirittura kernel panic.

Anche la gestione della rete è stata migliorata grazie al tuning automatico dei buffer TCP e all’ottimizzazione delle dimensioni dei blocchi di trasferimento.

In questo modo i download FTP e HTTP possono sfruttare appieno la banda disponibile, mentre gli upload tramite ZHTTP riescono a saturare una connessione Gigabit raggiungendo velocità fino a circa 113 MB al secondo.

Le operazioni lato server sono state ottimizzate al punto da raggiungere picchi teorici fino a 470 MB al secondo durante copie interne di file.

Il sistema include anche nuove funzioni per copiare file direttamente sul server tramite comandi FTP avanzati come CPFR, CPTO e COPY, con supporto per copie asincrone in background e monitoraggio del progresso.

Parallelamente sono stati introdotti importanti miglioramenti di sicurezza. Il sistema ora include controlli avanzati per evitare attacchi di path traversal o manipolazioni tramite symlink, limitando rigorosamente le operazioni ai percorsi consentiti.

Sono stati aggiunti controlli contro possibili attacchi CSRF nell’interfaccia web e una validazione più rigorosa dei comandi FTP, come nel caso del comando PORT che ora verifica la corrispondenza dell’indirizzo IP per evitare connessioni malevole.

Un’altra novità importante riguarda il redesign completo della dashboard web. L’interfaccia è stata completamente riprogettata e ora include strumenti di gestione dei trasferimenti in tempo reale.

L’utente può monitorare la velocità, il tempo trascorso, la percentuale di completamento e il percorso di destinazione di ogni operazione.

È possibile mettere in pausa e riprendere copie lato server, annullare trasferimenti attivi e visualizzare messaggi di errore dettagliati che spiegano esattamente cosa è andato storto, ad esempio in caso di disco pieno o filesystem in sola lettura.

Il nuovo file manager web integra anche menu contestuali con azioni rapide come download, rinomina, eliminazione o copia dei file, oltre alla possibilità di creare nuovi file e cartelle, caricare directory intere e cancellare cartelle non vuote con conferma.

Sono presenti anche diversi temi grafici e un monitor delle statistiche del sistema che mostra informazioni come utilizzo del disco, temperatura della CPU, memoria RAM e attività di rete.

Sul fronte specifico della PlayStation 5, la nuova versione introduce inoltre un modulo di filtro di rete a livello kernel e una serie di helper per interagire con la memoria del sistema utilizzando primitive del payload SDK.

Questo permette una gestione più efficiente delle operazioni di rete e una migliore integrazione con l’architettura della console.

Non mancano naturalmente numerose correzioni di bug che migliorano la stabilità generale del server. Sono stati risolti problemi legati alla gestione delle interruzioni durante sendfile, perdite di file descriptor in alcune condizioni di errore, problemi di binding dei socket in modalità passiva e anomalie nella generazione dei nomi temporanei dei file.

Anche il sistema di build è stato migliorato con definizioni di piattaforma unificate, nuovi strumenti di test per verificare la sicurezza dei percorsi e aggiornamenti al Makefile per rendere il processo di compilazione più pulito e affidabile.

Caratteristiche principali

  • Percorso dati zero-copy dove disponibile (fast path con sendfile; fallback su I/O bufferizzato quando attiva la cifratura).
  • I/O TCP robusto (gestione invii parziali, EINTR e buffer di invio consapevoli della backpressure).
  • Timeout per canali di controllo e dati + timeout di inattività della sessione.
  • Hardening dei percorsi (canonicalizzazione, blocco del traversal, safe-list opzionale per /dev, /proc, /sys).
  • Logging strutturato per sessione + statistiche (byte/file inviati e ricevuti).
  • Limitazione della velocità di trasferimento (token bucket, attivabile/disattivabile a compile-time).
  • Ripresa upload tramite REST + STOR; upload in append tramite APPE.
  • Cifratura opzionale ChaCha20 (AUTH XCRYPT) con chiave precondivisa (PSK).
  • Notifiche a schermo su PS4/PS5 (IP/porta e stato).
  • File explorer web ZHTTP opzionale (a compile-time, abilitato di default su PS4/PS5).

Comandi supportati

  • Autenticazione e controllo: USER, PASS, QUIT, NOOP.
  • Navigazione: CWD, CDUP, PWD.
  • Elenco file: LIST, NLST, MLSD, MLST (MLST minimale).
  • Trasferimento: RETR, STOR, APPE, REST.
  • Gestione file: DELE, RMD, MKD, RNFR, RNTO.
  • Connessione dati: PORT, PASV.
  • Informazioni: SIZE, MDTM, STAT, SYST, FEAT, HELP.
  • Parametri di trasferimento: TYPE, MODE, STRU.
  • Cifratura (opzionale): AUTH XCRYPT (ChaCha20 con chiave precondivisa PSK).

Esecuzione (Daemon) per Piattaforma

Linux

./build/linux/release/zftpd-linux--v<version>.elf

Opzioni utili (solo POSIX): -p <porta> e -d <directory_root>.

macOS

./build/macos/release/zftpd-macos-<arch>-v<version>

PS4

Richiede un payload loader (ad esempio WebKit/PPPwn/Netcat/GoldHEN). zftpd non richiede un HEN residente, ma deve essere avviato tramite loader/exploit.

  • Se il loader richiede un payload .bin: inviare build/ps4/release/zftpd-ps4-v<version>.bin.
  • Se il loader accetta ELF: è possibile scegliere tra build/ps4/release/zftpd-ps4-v<version>.bin e build/ps4/release/zftpd-ps4-v<version>.elf.

All’avvio viene mostrata una notifica con l’indirizzo IP e la porta.

PS5

Richiede un payload loader (etaHEN/Netcat o equivalente).

  • Se il loader richiede un payload .bin: inviare build/ps5/release/zftpd-ps5-v<version>.bin.
  • Se il loader accetta ELF: è possibile scegliere tra build/ps5/release/zftpd-ps5-v<version>.bin e build/ps5/release/zftpd-ps5-v<version>.elf.

All’avvio viene mostrata una notifica “started” insieme a FTP: <ip>:<port>.

Configurazione

La configurazione in fase di compilazione si trova in ftp_config.h. Macro utili:

  • FTP_DEFAULT_PORT (PS4/PS5 predefinita 2122, POSIX predefinita 2121)
  • FTP_MAX_SESSIONS
  • FTP_SESSION_TIMEOUT
  • FTP_TRANSFER_RATE_LIMIT_BPS / FTP_TRANSFER_RATE_BURST_BYTES
  • FTP_LOG_COMMANDS

Note

Se su PS4/PS5 compare il messaggio “payload already loaded”, significa che un’istanza è già attiva (deduplicazione). Il nuovo daemon tenterà di terminare la vecchia istanza e avviarne una nuova sulla porta FTP_DEFAULT_PORT:2122.

Se non riesce, proverà con la porta successiva (FTP_DEFAULT_PORT+1:2123) fino a un massimo di 9 porte consecutive.

Per test su host: make TARGET=linux test oppure make TARGET=macos test.

ZHTTP (Web File Explorer)

  • Cos’è: Interfaccia web leggera per navigare, scaricare e (opzionalmente) caricare file direttamente dal browser.
  • Abilitazione/disabilitazione: Attivo di default su PS4/PS5. Disattivato di default sulle altre piattaforme. È possibile forzare l’attivazione con ENABLE_ZHTTPD=1 oppure disattivarlo con ENABLE_ZHTTPD=0 in fase di build (esempio: make TARGET=ps5 ENABLE_ZHTTPD=0).
  • Impatto sulla build: Aggiunge i moduli HTTP (event_loop_kqueue, http_server, http_parser, http_response, http_api, http_csrf, http_resources).
  • Utilizzo: Dopo aver avviato il daemon, aprire http://<ip>:<port>/ (la porta coincide con quella FTP configurata). Viene mostrato un file explorer con breadcrumb, download diretto e — se compilato con ENABLE_WEB_UPLOAD=1 (abilitato insieme a ZHTTP) — un pulsante per l’upload.
  • Sicurezza: Pensato per scenari LAN/payload; non prevede autenticazione aggiuntiva oltre al contesto della rete locale. Mantenere la porta chiusa su WAN.

Changelog

Un aggiornamento importante che punta a migliorare le prestazioni, rafforzare la sicurezza, aumentare l’affidabilità e introdurre una dashboard web completamente ridisegnata con gestione dei trasferimenti in tempo reale.

Miglioramenti alle prestazioni

  • Download HTTP zero-copy: Utilizzo di sendfile(2) per le risposte HTTP, eliminando le copie dei buffer nello spazio utente e aumentando la velocità di download.
  • Retry sendfile con burst/cooldown: Risolti i blocchi della cache su filesystem exFAT di PS4/PS5 (~28 MB) introducendo un cooldown di 1 MB tramite read() dopo uno stallo, ritentando sendfile e ricorrendo all’I/O bufferizzato solo in caso di fallimento immediato.
  • Sicurezza sendfile basata sul filesystem: Rilevamento automatico dei filesystem non sicuri (exfatfs, msdosfs, nullfs, pfsmnt) su PS4/PS5 tramite fstatfs() per disabilitare sendfile ed evitare kernel panic.
  • Auto-tuning TCP: Attivata l’ottimizzazione automatica dei buffer TCP a livello di sistema operativo e migliorate le dimensioni dei chunk per download FTP e HTTP.
  • Streaming upload HTTP: Introdotti buffer dedicati per gli upload e ottimizzazioni dei socket per mantenere un throughput di scrittura costante.
  • Copie tra dispositivi ottimizzate: Scritture dirette di grandi dimensioni con suggerimenti di read-ahead sequenziale esteso su PS4/PS5 durante la copia dei file.
  • Calcolo dimensione directory lazy: Aggiunto endpoint GET /api/dirsize per calcolare la dimensione delle cartelle su richiesta con limite di profondità di 32 livelli; l’interfaccia recupera le dimensioni in modo asincrono dopo il rendering.
  • Velocità lato server: Raggiunti picchi fino a 470 MB/s nelle operazioni interne al server.
  • Upload a velocità Gigabit: Gli upload tramite zhttp possono saturare una connessione Gigabit raggiungendo circa 113 MB/s.

Miglioramenti alla sicurezza

  • Confinamento dei percorsi HTTP/FTP: Implementate http_api_set_root, http_validate_and_confine e validazioni canonical safe-path su tutti gli endpoint API (list, download, stats, create, upload) per bloccare path traversal e attacchi tramite symlink.
  • Protezione CSRF: http_csrf_init ora fallisce se non è disponibile sufficiente entropia; applicata la verifica CSRF su tutte le operazioni che modificano lo stato e disabilitati gli upload in caso di errore di inizializzazione.
  • Validazione IP del comando FTP PORT: Rifiutati i comandi PORT con indirizzi IP non corrispondenti (configurabile tramite FTP_PORT_ALLOW_FOREIGN_IP).
  • Contatori di connessione atomici: I contatori delle connessioni HTTP e i flag di utilizzo sono stati convertiti a tipi atomici per garantire la sicurezza nei thread.
  • Sicurezza del pool di buffer: Aggiunti controlli statici e verifiche dei limiti per evitare comportamenti indefiniti con grandi bitmask FTP_MAX_SESSIONS.

Aggiornamenti al protocollo FTP

  • Comandi CPFR / CPTO / COPY: Aggiunto supporto completo alla copia dei file lato server con operazioni asincrone basate su pthread, monitoraggio del progresso e fallback automatico tra dispositivi.
  • Spostamento tra dispositivi (RNTO): Fallback trasparente EXDEV con supporto allo spostamento ricorsivo tra filesystem diversi e rollback sicuro se necessario.
  • Correzione STOR zero-window: Risolti blocchi negli upload (~800 KB) su PS4/PS5 causati dal limite SO_RCVBUF, forzando modalità single-buffer con aumento condizionale del buffer.
  • Spegnimento controllato: Garantita la pulizia corretta del pool di sessioni e il reset dei buffer TCP allo stop del server.
  • Messaggi di errore migliorati: Risposte 550 più dettagliate e leggibili per errori di copia o rinomina, permettendo a client come FileZilla e WinSCP di mostrare informazioni utili.

Nuova dashboard web

  • Gestione trasferimenti: Schede con progressi in tempo reale che mostrano velocità, tempo trascorso, percentuale, barra di avanzamento e percorso di destinazione.
  • Pausa / Riprendi: Possibilità di mettere in pausa o riprendere copie lato server tramite POST /api/copy_pause con gestione del thread a intervalli di 100 ms.
  • Annulla trasferimento: Cancellazione immediata delle copie attive tramite POST /api/copy_cancel con aggiornamento istantaneo dell’interfaccia.
  • Diagnostica errori: visualizzazione di errori chiari e leggibili, con mappatura dei codici OS (es. ENOSPC → “Disco pieno”, EROFS → “Filesystem in sola lettura”).
  • Formato tempo intelligente: Il tempo trascorso viene mostrato dinamicamente in secondi, minuti o ore.
  • Finestra “Send To”: Browser di cartelle integrato per copie lato server, con navigazione a partire dalla root /.
  • Eliminazione ricorsiva directory: Supporto alla cancellazione di cartelle non vuote con conferma tramite POST /api/delete?recursive=1.
  • Menu contestuale: Menu con clic destro per operazioni rapide come Download, Send To, Rename e Delete; menu di sfondo con New File, New Folder, Upload e Refresh.
  • Upload separati: Pulsanti distinti per caricare file o cartelle.
  • Sistema temi: Diversi temi grafici selezionabili tramite menu a tendina compatibile anche con dispositivi touch.
  • Monitor statistiche: Finestra con utilizzo disco, temperatura CPU, RAM, processi e grafici di rete.

Supporto piattaforma PS5

  • Filtro di rete kernel: Sviluppato modulo ps5_net_filter con installazione di hook di rete a livello syscall usando primitive di lettura/scrittura del kernel.
  • Helper kernel: Aggiunte funzioni kernel_get_base(), kernel_get_phys_addr() (tramite page table x86-64 a 4 livelli) e kernel_clear_pte_nx() usando primitive ps5-payload-sdk.
  • Serializzazione inode PFS: Apertura O_CREAT serializzata con mutex su PS4/PS5 per evitare contese sul lock di allocazione inode (che potevano causare ritardi superiori a 20 secondi).
  • Buffer TCP estesi: Aumentato FTP_TCP_RCVBUF a 4 MB su PS4 per allinearlo a PS5 e gestire meglio la latenza di scrittura PFS.

Correzioni di bug

  • Gestione EINTR in sendfile: Gli interrupt vengono trattati come invii parziali per evitare la ritrasmissione dei dati già inviati.
  • Overflow nome file temporaneo: Risolto un buffer overflow nella generazione dei nomi temporanei; ora vengono creati nella directory di destinazione.
  • Perdita file descriptor: Corretta la gestione delle interruzioni durante close() per evitare leak tra sistemi FreeBSD/PlayStation e Linux.
  • Modalità passiva FTP: Risolti problemi di bind dei socket e select() su PS4/PS5.
  • Verifica post-eliminazione: Controllo del percorso dopo unlink/rmdir nell’API DELETE per individuare eventuali cancellazioni fallite.
  • Statistiche upload: Migliorata l’interfaccia di upload con statistiche in tempo reale e pulsante di chiusura.
  • POSIX_FADV_DONTNEED disabilitato su PS4: Evitato l’uso di chiamate fadvise non supportate che potevano causare problemi.

Aggiornamenti build e strumenti

  • Definizioni piattaforma unificate: Introdotti PLATFORM_PS4 e PLATFORM_PS5 accanto alle definizioni PS4 e PS5 negli header di configurazione.
  • Test di confinamento HTTP: Creato il file test_http_confinement.c per verificare la protezione contro path traversal e symlink.
  • Migliorie al Makefile: Aggiornato il target di test includendo LIB_OBJECTS e aumentata la dimensione dei chunk sendfile HTTP a 1 MB.

Download zftpd v1.4.0

Linux

macOS

PlayStation 4

PlayStation 5

Sorgenti

Alcune parti di questo articolo sono state generate con l’aiuto dell’intelligenza artificiale.

🔥 Prodotti in promozione e articoli più venduti: PS5

Vedi altri prodotti PS5

Questo articolo contiene link affiliati a Amazon. Se acquisti tramite questi link, potrei guadagnare una commissione senza costi aggiuntivi per te.

Ultimo aggiornamento 2026-04-12 / Link di affiliazione / Immagini da Amazon Product Advertising API

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui
Captcha verification failed!
Punteggio utente captcha non riuscito. Ci contatti per favore!

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.