Home Homebrew Rilasciato zftpd v1.2.0: il server FTP zero-copy in C per console PlayStation...

Rilasciato zftpd v1.2.0: il server FTP zero-copy in C per console PlayStation 4 e PlayStation 5

114
0

Pubblicato un rapido, quanto intenso aggiornamento di zftpd, il server FTP open source sviluppato da seregonwar, che introduce importanti cambiamenti interni e miglioramenti strutturali mirati a rendere il progetto ancora più solido, sicuro ed efficiente.

La nuova versione 1.2.0 segna un passo significativo nell’evoluzione di questo Zero-copy FTP Daemon, pensato per offrire trasferimenti ad alte prestazioni sulle console Sony di ultima generazione e su sistemi POSIX tradizionali.

zftpd è progettato per minimizzare le copie di dati in memoria durante il trasferimento dei file, sfruttando meccanismi come sendfile() per ridurre il carico sulla CPU e migliorare il throughput.

Questo approccio lo rende particolarmente adatto a contesti come PlayStation 4 e PlayStation 5, dove stabilità e gestione efficiente delle risorse sono fondamentali quando si lavora con sistemi modificati. Il supporto rimane esteso anche a Linux, macOS e in modalità compatibile a PlayStation 3.

L’aggiornamento introduce una riorganizzazione interna del codice e un rafforzamento dell’architettura generale. Il sistema di logging è stato ampliato con registrazione strutturata per sessione e per singolo comando FTP, migliorando notevolmente le possibilità di debug.

Sul piano della sicurezza, la gestione dei percorsi è stata ulteriormente blindata con controlli più severi contro directory traversal, escape tramite symlink e violazioni della root jail.

Anche la gestione delle modalità PORT e PASV è stata rivista, con restrizioni più rigorose sull’IP del client e una gestione più robusta dei socket passivi.

Non mancano ottimizzazioni specifiche per PS4 e PS5, tra cui buffer TCP più ampi, notifiche a schermo migliorate con informazioni dettagliate su IP e porta del server, controllo più sicuro dei processi attivi e un sistema di fallback automatico delle porte nel caso quella predefinita sia già occupata.

Introdotto inoltre un sistema opzionale di rate limiting configurabile in fase di compilazione, che consente di definire limiti di velocità, timeout e gestione dei burst di traffico.

Caratteristiche principali

  • I/O TCP robusto (gestione di invii parziali, EINTR e backpressure).
  • Timeout per canale di controllo e dati + timeout di inattività della sessione.
  • Rafforzamento della gestione dei percorsi (blocco del traversal + canonicalizzazione best-effort).
  • Logging strutturato per sessione e per singolo comando.
  • Limitazione della velocità di trasferimento (opzionale, configurabile in fase di compilazione).
  • Notifiche a schermo su PS4/PS5 (IP, porta e stato del server).

Metriche delle prestazioni

PiattaformaCapacità di elaborazioneUtilizzo della CPUCollo di bottiglia
PS4 (HDD)85 MB/s3%Disk I/O
PS5 (SSD)118 MB/s2%Network (1 Gbps)
Linux (SSD)121 MB/s1%Network

Misurazioni: Trasferimento di un file da 100 MB, sendfile() abilitato.

Esecuzione (Daemon) per Piattaforma

Linux

./build/linux/release/ftpd.elf

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

macOS

./build/macos/release/ftpd

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/ftpd.bin.
  • Se il loader accetta ELF: è possibile scegliere tra build/ps4/release/ftpd.bin e build/ps4/release/ftpd.elf.

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

PS5

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

  • Se il loader richiede un payload .bin: inviare build/ps5/release/ftpd.bin.
  • Se il loader accetta ELF: è possibile scegliere tra build/ps5/release/ftpd.bin e build/ps5/release/ftpd.elf.

All’avvio mostra notifiche “started” + FTP: <ip>:<porta>.

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.

Changelog

Questa release introduce miglioramenti strutturali nel logging, nella sicurezza, nella gestione delle sessioni, nel comportamento runtime su PS4/PS5 e nel sistema di build. Formalizza inoltre la copertura dei test e rafforza la robustezza dell’I/O.

Modifiche principali

Sottosistema di Logging

  • Aggiunti ftp_log.h e src/ftp_log.c.
  • Logging a livello di sessione e di singolo comando.
  • Utility di logging basate su righe di testo.
  • Integrazione degli hook di logging nei flussi RETR/STOR/APPE.

Test Unitari

Aggiunti

  • tests/test_security.c
  • tests/test_path_security.c

Aggiornamenti al Makefile

  • Target LIB_OBJECTS (build senza main).
  • Supporto build/esecuzione multi-test.
  • Esclusione automatica dei test su target non supportati.

Sicurezza & gestione percorsi

Normalizzazione Path & Enforcing Root (ftp_path.c)

  • Parsing rafforzato dei componenti del percorso.
  • Risoluzione rigorosa tramite realpath().
  • Validazione esplicita rispetto a session->root_path.
  • Prevenzione di directory traversal e symlink escape fuori dalla root della sessione.

Gestione PORT / PASV

  • PORT limitato allo stesso IP del client.

PASV

  • Corretta chiusura/riutilizzo del socket passivo precedente.
  • Bind su INADDR_ANY.
  • Miglior rilevamento dell’IP locale per la risposta PASV.
  • Migliorata validazione del ciclo di vita e gestione dei socket.

Modifiche al Layer di Sessione

Estensioni di ftp_session_t

Aggiunti

  • root_path
  • Buffer RX del canale di controllo.
  • Flag di autenticazione.
  • Campi per rate limiting.

Aggiornamenti inizializzazione

  • Risoluzione realpath(root) durante l’inizializzazione della sessione.
  • Applicazione timeout socket all’avvio.
  • Integrazione del rate limiting nel percorso di ricezione dati.

Rate Limiting

  • Contabilizzazione trasferimenti basata sui byte effettivamente ricevuti.
  • Configurazione a compile-time in include/ftp_config.h per:
  • Timeout controllo.
  • Timeout dati.
  • Limite velocità trasferimento.
  • Dimensione burst.
  • FTP_SOCKET_TELEMETRY

Data Path & I/O

RETR / STOR / APPE

  • Contabilizzazione aggregata dei byte trasferiti.
  • Percorso unificato di invio dati tramite ftp_session_send_data.
  • sendfile utilizzato solo se il rate limiting è disabilitato.

STOR/APPE

  • Passaggio a ftp_buffer_acquire() / ftp_buffer_release().
  • Uso di pal_file_write_all() per scritture robuste.

Aggiunte al PAL

  • pal_socket_set_timeouts
  • pal_send_all
  • pal_file_write_all

Le risposte del canale di controllo ora utilizzano pal_send_all.

Helper aggiuntivi in ftp_session.c:

  • wait_fd_ready
  • monotonic_ns

Miglioramenti PS4 / PS5

Runtime & Avvio

  • Lookup PID più sicuro.
  • Terminazione di istanze esistenti prima del bind.
  • Inizializzazione con fallback porta (server_init_with_fallback).
  • Gestione notifiche migliorata.
  • Include riorganizzati e parsing CLI migliorato per build POSIX.

Buffer & TCP

  • Aumentate dimensioni buffer predefinite su PS4/PS5.
  • Aumentate dimensioni buffer TCP.
  • Migliorato comportamento del throughput sotto vincoli console.

Sistema di Build

  • Versione aggiornata a 1.2.0.
  • Header licenza MIT standardizzati in tutti i sorgenti.

Makefile

  • Supporto STRIP.
  • Output .bin per PS4/PS5.
  • Target di deploy aggiornati.
  • PS5 collegato a libSceNotification.

README riscritto e semplificato.

Piattaforme Supportate

  • OrbisOS (PS4)
  • ProsperoOS (PS5)
  • macOS
  • Linux (Debian)

Download zftpd v1.2.0

Linux (Debian)

  • zftpd-debian.elf
    SHA256: 43e02277d877ee9a1ed59d80ad33ee5ee8d40da40a7d405a6fe89b0c5c929158

macOS (Apple Silicon / arm64)

  • zftpd-macos-arm64
    SHA256: b7d60e4ad24b30190ef51738e483eb9331de07a6f64fe3f710ed39c2e52c2da6

PS4

  • zftpd-ps4-v1.2.0.bin (Payload binario)
    SHA256: b756438adbb1b4650fafd8359e41ff0949f9c81cd8da20be72ff1daadec7357d
  • zftpd-ps4-v1.2.0.elf (Formato ELF)
    SHA256: b77b64ed1ee0a5d011b027b5ddf3053cc2954f235799b0e79ab6daa721822e2c

PS5

  • zftpd-ps5-v1.2.0.bin (Payload binario)
    SHA256: ba65c205b713c0bed3194f850f85f16ca3a4c2c22e373a79850cfd9ac606bb52
  • zftpd-ps5-v1.2.0.elf (Formato ELF)
    SHA256: 665d762e42057b354debeaaf5bddc340d00120dc28d6ca2fa58c38bd335ee0c8

Codice Sorgente

  • Source code (ZIP)
    Archivio contenente il codice completo del progetto aggiornato alla versione 1.2.0.
Alcune parti di questo articolo sono state generate con l’aiuto dell’intelligenza artificiale.

🔥 Prodotti in promozione e articoli più venduti: PS4

Vedi altri prodotti PS4

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

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