PH-Neutral 0x7db

📜

Questo articolo è stato scritto nel 2011. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
PH-Neutral è stata l’ultima edizione — fedele al motto sul badge, “if it is good, they stop making it.” Phenoelit si è sciolta poco dopo. Molte delle tecniche di attacco descritte qui (bypass ASLR, downgrade Chip & PIN, intercettazione TETRA) sono state nel frattempo patchate o mitigate, ma le lezioni di fondo sui difetti implementativi nelle tecnologie “sicure” restano senza tempo. La ricerca sull’exploitation DWARF di James Oakley e Sergey Bratus è diventata un paper fondamentale nel campo.

If it is good, they stop making it”, il payoff stampato sui laccetti della conferenza, distribuiti a ogni partecipante, insieme a un badge über-l33t personalizzato con il nostro nickname e l'hash della chiave.

Essendo la mia prima esperienza a una conferenza di sicurezza internazionale (sono stato solo al camp ccc2k+7), ed essendo un outsider di ph dato che non avevo mai partecipato alle edizioni precedenti, il keynote di apertura tenuto da FX, staffer e frontman, è stato illuminante: “you ought to be here!”, ha urlato indicando il palco, indossando una camicia bianca col logo Phenoelit stampato su entrambe le maniche.

“Questa conferenza non è mai iniziata in orario”, ha continuato, “quindi non c'era motivo di farlo per quest'ultima”. Il programma è lineare: festa, il giorno dopo talk dalle 12:00 alle 19:30, poi festa, e l'ultimo giorno talk dalle 12:00 alle 17:30. Decisamente un setup che si sposa bene con l'alcol disponibile :-D.

Roma RSC 2011

📜

Questo articolo è stato scritto nel 2011. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
RVM esiste ancora ma la maggior parte dei Rubyisti è passata a rbenv, asdf o mise per la gestione delle versioni. I meetup del Ruby Social Club si sono spenti, ma la community Ruby italiana vive attraverso il RubyDay e vari gruppi locali.

Grazie agli sforzi di @jodosha e sulla scia del vecchio evento Javaday, ora ribattezzato codemotion che ha portato a Roma tanti sviluppatori Ruby da Milano, Padova e altre parti d’Italia — il primo Ruby Social Club ufficiale a Roma è stato un gran successo. Ovviamente, l’ufficialità si misura solo nella quantità di spam su Twitter postato a riguardo! :-): i precedenti RSC a Roma risalgono al 2006 organizzati dagli attuali membri di mikamai e altri meetup promossi da @jeko nel 2007.

Quello che conta è che c’è una community, c’è passione, e c’è voglia di condividere conoscenza — non importa chi organizza gli incontri, l’importante è che si facciano :-).

L’evento è stato semplice e diretto — prima qualche birra, poi la mia presentazione su RVM e gli interpreti Ruby, poi quella di Luca che ha annunciato il suo progetto minege.ms e dopo il vero social networking :-). Ho rivisto @gravityblast dopo tanto che non ci vedevamo, ho conosciuto il gruppo PIP e ho incontrato @svarione, @punkmanit, @leonardoperna, @riggasconi, @ogeidix e altre persone in gamba. Inoltre, abbiamo passato del gran bel tempo insieme, mettendo su un weekend davvero sgangherato e divertente. Ovviamente, enormi kudos alla macchina di @nhaima — che ci ha instancabilmente portato in giro per Roma per due giorni :-)

Ora, in attesa del prossimo meetup, grazie a tutti quelli che hanno partecipato, che mi hanno offerto birre e, ultimo ma non meno importante, grazie a @etapeta per avermi portato in tempo all’incontro — sei il vero eroe :-).

*BSD su un MacMini 4,1? Neanche per sogno. :-(

📜

Questo articolo è stato scritto nel 2011. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Buone notizie: FreeBSD supporta pienamente l’hardware del MacMini 4,1 (NV MCP89 SATA, BCM57762 NIC) da FreeBSD 9.x (2012). Anche NetBSD e OpenBSD hanno aggiunto il supporto. Il “neanche per sogno” nel titolo non è invecchiato bene — i BSD girano tranquillamente su questa macchina ormai.

Ho passato gli ultimi due giorni a cercare di configurare il Mac Mini in alluminio (rev. 4,1) come NAS server casalingo con storage crittografato, e volevo metterci un sistema BSD. C'è già un OpenBSD embedded sul gateway soekris, e un compagno sarebbe stato carino. :-)

Indovinate un po', non c'è verso:

  • FreeBSD 8.1 non completa il processo di boot, a causa di un bug nel chipset SATA, NV MCP89;
  • FreeBSD 8.2-RC1 fa il boot ma, a causa dello stesso bug, non riconosce nessun drive SATA né nessun dispositivo USB umass;
  • NetBSD 5.1 fa il boot senza problemi, gestisce i dischi SATA tramite il driver generico pciide (niente DMA, quindi piuttosto lento) ma, sfortunatamente, non gestisce il controller ethernet BCM57762. Ho provato con patch veloci e sporche per portare il driver bge al livello di -current, ma niente da fare: il MII link detection funziona, la scheda trasmette ma non riceve. Anche il controller sdmmc funziona con -current ma non con la 5.1-RELEASE. L'ACPI funziona correttamente;
  • OpenBSD 4.8 fa il boot, accede ai drive SATA senza DMA, e riconosce la scheda di rete bge, ma mostra lo stesso identico comportamento di NetBSD 5.1 col driver di -current;
  • DragonFlyBSD 2.8.2 non entra nemmeno in kernel mode, sospetto a causa di bug ACPI;
  • PureDarwin non mi ha ispirato granché, a causa dei tanti problemi bloccanti.

Tutti supportano lo storage crittografato, ho tirato su un disco NetBSD CGD senza problemi su dk wedge; FreeBSD ha gli interessanti strumenti gbde(8) e geli(8) basati su GEOM che non ho potuto testare, mentre OpenBSD supporta la crittografia tramite una personality softraid. Purtroppo, il supporto per l'hardware Apple, ormai esotico, è fuori discussione.

📜

Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Per il quadro generale — perché Myousica era in anticipo sui tempi e chi lo fa oggi — vedi la retrospettiva del 2026.

Questo è il terzo e ultimo post della serie Myousica. Il primo copriva la piattaforma Rails, il secondo l’editor multitraccia Flash. Questo copre come l’audio arriva effettivamente dal microfono dell’utente a un MP3 riproducibile — la pipeline che collega tutti i servizi insieme.

L’uploader è un’applicazione Rails 2.2 separata — headless, niente database, niente ActiveRecord. Solo controller, worker in background e strumenti di elaborazione audio. Andrea Franz ha costruito la versione iniziale ad aprile 2008, io ho preso in mano da maggio 2008 in poi. 120 commit, originariamente chiamato multitrack_server prima di essere rinominato in mewsic-uploader a marzo 2009.

La pipeline completa

Ecco il flusso completo dal microfono alla traccia riproducibile:

graph TD MIC["Microfono"] -->|RTMP| RED5["Red5 Media Server"] RED5 -->|FLV| DISK["Disco (spool)"] FLASH["Client Flash"] -->|"stop registrazione"| UC["UploadController"] FLASH -->|"upload MP3"| UC UC --> BG["Worker BackgrounDRb"] BG -.->|legge FLV| DISK BG --> FLV{"Input FLV?"} FLV -->|sì| WAV1["ffmpeg: FLV → WAV"] FLV -->|no| ANALYZE WAV1 --> ANALYZE["sox: analisi volume"] ANALYZE --> NORM["sox: normalizza al 90%"] NORM --> ENCODE["ffmpeg: WAV → MP3"] ENCODE --> WAVE["wav2png: waveform PNG"] WAVE --> CALLBACK["Callback HTTP a Rails"]

Due punti di ingresso: l’utente può caricare un file MP3 direttamente, oppure registrare via microfono (che produce uno stream FLV attraverso Red5). Entrambi finiscono come un MP3 con un PNG della forma d’onda.

📜

Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Per il quadro generale — perché Myousica era in anticipo sui tempi e chi lo fa oggi — vedi la retrospettiva del 2026.

Questo è il secondo post della serie Myousica. Il primo copriva la piattaforma Rails. Questo si immerge nell’editor multitraccia — il componente Flash/Flex dove gli utenti mixano effettivamente la musica nel browser.

Il multitraccia è stato inizialmente sviluppato da Vaclav Vancura, che ha costruito l’architettura originale, la libreria di componenti UI e il motore di riproduzione audio. Poi ho preso in mano io e l’ho ricablato pesantemente — integrando la registrazione, l’upload, i servizi backend e la macchina a stati che tiene tutto insieme. 81 file ActionScript, ~7.300 righe di codice, 129 commit.

Ecco lo screenshot originale di Vaclav che mostra la vista remix — dove le canzoni si collegano e si ramificano in nuovi remix:

Vista remix di Myousica — canzoni che si ramificano in remix

Cosa fa

L’editor si carica nel browser come SWF Flash. Si può:

  • Caricare fino a 16 tracce audio simultaneamente
  • Riprodurle tutte in sincrono con un unico controllo di trasporto
  • Regolare volume e bilanciamento per ogni singola traccia
  • Registrare la propria traccia dal microfono, sincronizzata con la riproduzione
  • Vedere le forme d’onda di ogni traccia
  • Cercare tracce da aggiungere al mix (via API Rails)
  • Salvare e pubblicare il risultato

Tutto questo avviene lato client in Flash Player 9, con il lavoro pesante (encoding, storage) delegato ai servizi backend.

📜

Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Per il quadro generale — perché Myousica era in anticipo sui tempi e chi lo fa oggi — vedi la retrospettiva del 2026.

Mewsic

Dal video promozionale di Myousica — la band animata

Oggi rilasciamo il codice sorgente di Myousica — la piattaforma collaborativa per il remixaggio musicale che stiamo costruendo dalla fine del 2007. Abbiamo lanciato a settembre 2008 dopo 9 mesi di sviluppo, l’abbiamo tenuta in piedi per circa 5 mesi, e abbiamo messo il sito in pausa a febbraio 2009. Il progetto è stato ribattezzato Mewsic lungo il percorso, ma l’idea è la stessa. Piuttosto che lasciare il codice a marcire su un server privato, lo mettiamo tutto su GitHub. Cronologia completa, difetti inclusi.

Questo è il primo di tre post che esplorano il codice. Questo copre l’applicazione Rails principale — la piattaforma vera e propria. I prossimi due copriranno l’editor multitraccia Flash e la pipeline di elaborazione audio.

L’idea

Il pitch è semplice: io carico una traccia di basso di Let It Be, tu carichi la tua voce, qualcun altro aggiunge chitarra e batteria. Attraverso Myousica, c’è un editor multitraccia che gira nel browser dove puoi mixare tutto insieme, regolare i volumi e pubblicare il risultato. Altre persone possono poi prendere il tuo remix, aggiungere le proprie tracce e remixare il remix.

📜

Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

Una barra di ricerca con nastri di autocompletamento che si collegano a monumenti del mondo su un globo stilizzato

Per curiosità, stavo guardando come un browser interagisce col backend di Google Instant. Mentre osservavo gli scambi HTTP con Firebug, prima mi sono chiesto perché codificano HTML e JS con sequenze di escape \xYY, poi perché le stessissime funzioni JS vengono mandate avanti e indietro ad ogni richiesta, e poi mi sono imbattuto nel servizio JSONp google.com/s?q=QUERY.

Dagli una query, e ti restituirà le frasi suggerite correlate che vengono usate per costruire il menu sotto la barra di ricerca quando usi i suggerimenti e/o Instant (non ho scavato troppo in tutti gli altri parametri).

Ad ogni modo, la cosa interessante è che, ovviamente, i suggerimenti sono personalizzati per paese. Per mostrare le differenze in modo esplicito, chiediamo al servizio la query più semplice possibile, a:

Per l’Italia otterrai:

$ curl http://www.google.it/s?q=a
window.google.ac.h(["a",[["ansa","","0"],
["alice","","1"],["alitalia","","2"],["alice mail","","3"],
["apple","","4"],["agenzia delle entrate","","5"],
["audi","","6"],["aci","","7"],["autoscout","","8"],
["atm","","9"]],"","","","","",{}])

hmm, togliamo il JSONp e i parametri:

$ curl -s http://www.google.it/s?q=a | ruby -rjson -ne 'puts JSON($_[19..-2])[1].map(&:first).join(", ")'            
ansa, alice, alitalia, alice mail, apple, agenzia delle entrate, audi, aci, autoscout, atm

Per gli USA otterrai:

amazon, aol, att, apple, american airlines, abc, ask.com, amtrak, addicting games, aim

Regno Unito:

argos, amazon, asda, asos, autotrader, aa route planner, aol, apple, amazon uk, aqa

Irlanda:

📜

Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Panmind non esiste più. Le repo GitHub esistono ancora come reperti storici, ma l’ecosistema di plugin Rails descritto qui è stato sostituito da gem e engine da un pezzo. Per la storia più profonda dell’architettura — il framework SPA, la pipeline di analytics, la condivisione di sessioni cross-linguaggio — vedi la retrospettiva del 2026.

Il 22 luglio 2010, Mikamai ha ospitato un Ruby Social Club a Milano, dove circa 50 persone hanno assistito a cinque talk su Ruby, sviluppo web e startup. Sono stato contento di essere uno degli speaker, e ho presentato un insieme di plugin Rails che noi abbiamo estratto dal nostro ultimo (e più grande) progetto: Panmind (leggi di più nella pagina about), rilasciati come Open Source su GitHub.

La presentazione è divisa in due parti: la prima spiega perché dovresti seguire il sano principio di ingegneria del software di scrivere codice modulare e a responsabilità separate, e poi come potresti (e dovresti) estrarlo dalla tua applicazione Rails disaccoppiando la configurazione e preparando il rilascio Open Source, scrivendo documentazione E presentando a un evento Ruby così, si spera, qualcun altro scriverà i test unitari! :-)

Abbiamo rilasciato un plugin SSL helper che implementa dei filtri (come ssl_requirement di Rails) ma anche degli helper per le named route: basta con <%= url_for :protocol => 'https' %>! Avrai qualcosa come plain_root_url e ssl_login_url — come se fossero integrati nel framework.

Poi, un plugin semplicissimo per Google Analytics, con supporto <noscript>, un paio di helper per i test e un embrione di framework JS per Analytics — si spera che evolva in un plugin jQuery completo. Poi, un’interfaccia ReCaptcha, con supporto alla validazione AJAX, e infine un’interfaccia Zendesk per Rails.

Sull'exploit PDF e kernel dell'iPhone

📜

Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
L’exploit di jailbreakme.com è stato patchato in iOS 4.0.2 nell’agosto 2010. Da allora Apple ha aggiunto ASLR, PAC, PPL e Lockdown Mode — la superficie d’attacco “visiti un sito, ti bucano il telefono” è drasticamente più difficile da sfruttare oggi, anche se non impossibile (vedi gli zero-click di NSO Group). Il punto più ampio sui walled garden e gli incentivi alla disclosure resta attuale.

Jailbreak me

Come la maggior parte di voi già sa, ci sono due vulnerabilità aperte e critiche nelle versioni di iPhone OS dalla 3.x in su. La prima risiede nel componente Compact Font Format del renderer PDF, la seconda è un errore nel kernel che permette agli attaccanti di bypassare la sandbox (SeatBelt) dentro cui le applicazioni vengono eseguite sull’iPhone.

Le due vulnerabilità sono state scoperte da @comex, @chpwn e altre persone.

Solo poche settimane dopo il difetto di design .lnk su Windows (ragazzi, usate LoadLibraryW per caricare una dannata icona!), queste vulnerabilità di iPhone OS sono ancora più interessanti, per il modo in cui il rilascio viene gestito dalla community e dal vendor.

Ho passato 3 ore ieri notte a cercare informazioni dettagliate sul bug, e a parte confusi (e propagandistici) blog post, le uniche briciole di informazione sono in questo tweet e nell’exploit PDF vero e proprio su jailbreakme.com. Dove sono i post sulle security mailing list? Dov’è il CVE? Persino il CERT ancora non dice niente su questa vulnerabilità.

📜

Questo articolo è stato scritto nel 2010. È qui per ragioni storiche — i dettagli tecnici potrebbero non essere più validi.

🔍
Retrospettiva 2026
Ruby 1.9 ha raggiunto la fine del ciclo di vita nel 2015 e Ruby 3.x ha ulteriormente cambiato il formato marshal. La repo erlang-ruby-marshal su GitHub è archiviata e non mantenuta. Se oggi hai bisogno di interoperabilità Erlang-Ruby, meglio usare JSON, MessagePack o Protocol Buffers.

Erlang logo

In sintesi, aggiunge il supporto per l’unmarshaling delle stringhe 1.9, e implementa l’ultimo tipo mancante (TYPE_LINK) che mancava dal codice. I test ancora latitano, qualcuno vuole dare una mano? :-)

Added TYPE_LINK, needed because of how ruby 1.9 marshals strings.

In 1.9, Ruby marshals the string encoding in the binary output, and
uses an Ivar construct (TYPE_IVAR) to wrap the string and adds an
"encoding" instance variable (notice: without a leading @) whose
value is the encoding itself.

While the Ivar code worked correctly, the values of the encodings
are actually *strings*, that are being reused via the TYPE_LINK
construct, that wasn't implemented.

So, the get() and put() primitives are being used to store not
only tuples {id, sym} for symbols, but now store either

  {{symbol, ID}, sym}

  OR

  {{value,  ID}, val}

for the other types that use TYPE_LINK.

By reading the ruby marshal.c source code, it looks like that MANY
data types save their values in the arg->data hashtable, but by
inspecting the binary marshal output of, e.g, an array of floats,
links aren't used.

Thus, in this unmarshaler, links are considered, for now, only for
strings and regexes.

Forkami su GitHub: http://github.com/vjt/erlang-ruby-marshal


In questa pagina