Come ti distruggo il sito web con una fattura elettronica

A partire da quest’anno, finalmente, è stata introdotto l’utilizzo della fatturazione elettronica verso tutti. Avendo lavorato allo sviluppo e l’implementazione di tutte le soluzioni software necessarie per un mio cliente (che gestisce uno studio di commercialisti), ho potuto vedere come molte aziende sono andate in panico per quella che è in realtà una novità bella, utile ed ecologica.

Ovviamente il formato delle fatture elettroniche è documentato, aperto e standard, per consentire a tutti quanti di creare software che permetta di generare fatture elettroniche, nonché visualizzare e importare quelle prodotte da altri. Esistono anche diversi siti web che forniscono un servizio di visualizzatore online per fatture elettroniche.

Una caratteristica interessante della fattura elettronica è il fatto che il formato consente l’inserimento di allegati, tramite l’uso di specifici tag XML e la codifica in base64 del documento allegato. Molti gestionali usano questa possibilità per inserire una rappresentazione in PDF dentro alla fattura elettronica XML. Si tratta della vecchia fattura “cartacea” digitale, più semplice da leggere ma senza valore legale.

Questo si traduce, dentro al file XML, in un codice simile a questo:

<Allegati>
    <NomeAttachment>documento.pdf</NomeAttachment>
    <Attachment>
    JVBERi0xLjcKJeLjz9MNCjIgMCBvYmoKPDwvQ291bnQgMSAvS2lkcyBbMSAwIFJdIC9UeXBlIC9QYWdl
    cyA+PgplbmRvYmoKCjUgMCBvYmoKPDwvTGVuZ3RoIDQgL1JlYWRkbGVQYWdlQmFja2dyb3VuZENvbnRl
    bnRTdHJlYW0gPDw+PiA+PnN0cmVhbQpxClEKCmVuZHN0cmVhbQplbmRvYmoKCjQgMCBvYmoKPDwvUHJv
    Y1NldCBbL1BERiAvVGV4dF0gPj4KZW5kb2JqCgoxIDAgb2JqCjw8L0NvbnRlbnRzIFs1IDAgUl0gL0Ny
    b3BCb3ggWzAgMCA2MTIgNzkyXSAvTWVkaWFCb3ggWzAgMCA2MTIgNzkyXSAvUGFyZW50IDIgMCBSIC9S
    ZWFkZGxlUGFwZXJJbmZvIDw8L0NvbG9ySWQgL1doaXRlIC9TdHlsZUlkIC9CbGFuayA+PiAvUmVzb3Vy
    Y2VzIDQgMCBSIC9Sb3RhdGUgMCAvVHlwZSAvUGFnZSA+PgplbmRvYmoKCjMgMCBvYmoKPDwvUGFnZXMg
    MiAwIFIgL1R5cGUgL0NhdGFsb2cgPj4KZW5kb2JqCgo2IDAgb2JqCjw8L0NyZWF0aW9uRGF0ZSAoRDoy
    MDE5MDExOTIzMTIzOCswMScwMCcpIC9Nb2REYXRlIChEOjIwMTkwMTE5MjMxMjM4KzAxJzAwJykgL1By
    b2R1Y2VyIChQREYgRXhwZXJ0IDIuNC4yMSBNYWMpID4+CmVuZG9iagoKNyAwIG9iago8PC9GaWx0ZXIg
    L0ZsYXRlRGVjb2RlIC9JRCBbPGM5NmM5NTBhZGJmZDY1OTE4Y2E0ZTVjNmNhNzVmOGE5PiA8Yzk2Yzk1
    MGFkYmZkNjU5MThjYTRlNWM2Y2E3NWY4YTk+XSAvSW5kZXggWzEgN10gL0luZm8gNiAwIFIgL0xlbmd0
    aCAzNyAvUm9vdCAzIDAgUiAvU2l6ZSA4IC9UeXBlIC9YUmVmIC9XIFsxIDQgNF0gPj5zdHJlYW0KeJxj
    ZGBguAjEDIxALABlME6GiSyDMTxhUkegDCY3EAMAc7sDeQplbmRzdHJlYW0KZW5kb2JqCgoKJSBQREYg
    RXhwZXJ0IDYwOSBNYWMgT1MgRG1nIDhiMTQ2ZWU0NzQyOSsKCnN0YXJ0eHJlZgo1ODIKJSVFT0YK
    </Attachment>
</Allegati>

Questo esempio può sembrare artificiale, ma in realtà la rappresentazione in base64 scritta qui sopra contiene un vero file PDF, con una sola pagina bianca completamente vuota in formato Letter. Naturalmente un documento con del testo occuperebbe più spazio.

Come potete notare, viene anche indicato il nome del file allegato.

I visualizzatori online

Perché vi ho spiegato tutti questi dettagli sugli allegati alle fatture elettroniche? È presto detto: mi era stato chiesto di cercare un visualizzatore che potesse mostrare agevolmente gli allegati. Tra i primi che ho trovato ce n’erano due:

Provando entrambi i servizi con una fattura contenente allegati, ho potuto verificare che tutti e due i siti (scritti in PHP) funzionavano nello stesso modo:

  1. L’utente carica un file XML
  2. Il sito lo riceve e ne crea una copia in una directory temporanea
  3. Il sito controlla la presenza di eventuali allegati, se presenti estrae anch’essi con il nome originale
  4. All’utente viene permesso di visualizzare graficamente il contenuto della fattura, con i link agli eventuali allegati

Nel caso in cui leggere il punto 3 non vi abbia fatti trasalire, sentendo un forte brivido corrervi lungo la schiena, posso dirvi che mi auguro non lavoriate nell’industria dello sviluppo software. Se invece lo fate, vi chiedo di rileggerlo un paio di volte.

La vulnerabilità

Permettere ad un utente di caricare dei file non è di per sé pericoloso, posto che vengano prese le misure di sicurezza necessarie. Tuttavia i siti analizzati effettuavano dei controlli sulla fattura XML ma non sugli allegati. Questo significa che era possibile creare una fattura (vera o finta, non ha importanza) con allegato un file con estensione PHP, il linguaggio più comunemente usato per programmare siti web.

I siti stessi estraevano i file PHP dagli allegati e li copiavano nella rispettiva directory temporanea, fornendone poi l’URL all’utente. Al malintenzionato di turno sarebbe bastato quindi inserire del codice malevolo per poi effettuare vari tipi di operazioni.

Per fare un test rivelatore ma innocuo, ho creato una fattura la cui sezione degli allegati è la seguente:

<Allegati>
    <NomeAttachment>wowowowo.php</NomeAttachment>
    <Attachment>PD9waHAgcGhwaW5mbygpOw==</Attachment>
</Allegati>

Potete visualizzare il documento completo cliccando qui. Il contenuto codificato corrisponde al seguente programma:

<?php phpinfo();

Si tratta di uno script inerte, che non arreca nessun tipo di danno al server sul quale viene eseguito, ma mostra soltanto le informazioni sulla versione del software installato. Perciò consente in modo semplice di verificare se il codice PHP gira correttamente.

Entrambi i siti summenzionati hanno accettato senza problemi la mia fattura emessa da Paperino a Zio Paperone, estraendo l’allegato in PHP e fornendone l’URL. Dagli screenshot potete vedere chiaramente che il codice veniva eseguito:

In realtà, pur avendo eseguito un codice assolutamente innocuo e privo di conseguenze, se io fossi stato un malintenzionato avrei potenzialmente potuto fare molto peggio. Per esempio, un attaccante avrebbe potuto decidere di caricare un file manager in PHP come questo su uno dei siti e usarlo per:

  1. Modificare il visualizzatore di fatture affinché salvasse una copia di ogni file caricato
  2. Alterare la pagina di login, in modo che le credenziali inserite dagli utenti finissero nelle mani sbagliate
  3. Creare pagine in una posizione qualsiasi del sito e usarle per una campagna di phishing
  4. Cancellare completamente tutto il sito web

No, non sto esagerando.

Conclusione

Quando si sviluppa del software, specialmente le applicazioni web esposte all’utilizzo indiscriminato di migliaia di utenti, prestare la massima attenzione alla sicurezza è assolutamente imprescindibile. In questo caso sussisteva un rischio per i dati caricati dagli utenti, nonché per i contenuti stessi del sito web che avrebbero potuto essere alterati o eliminati.

Il rischio dato dalla possibilità di upload di file da parte degli utenti si può eliminare in diversi modi:

  • Inserendo una whitelist di estensioni consentite (ad esempio PDF, JPG)
  • Disattivando l’esecuzione degli script nella directory di destinazione degli upload, in tal caso visitare un file PHP avrebbe mostrato il codice senza eseguirlo
  • Nel caso degli allegati di fatture, optando per non estrarli e ripresentarli all’utente tramite data URL (non tutti i formati sono consentiti, ma quelli ai file PDF sì)

Ovviamente i gestori di entrambi i siti web sono stati preventimente informati del problema ed è stato dato loro modo di correggerlo prima che questo articolo venisse pubblicato. L’autore di AmministrazioniComunali.it ha risposto con estrema prontezza comunicandomi di aver chiuso la falla.

Da quanto ho potuto vedere, tutti e due i siti hanno optato per la whitelist, che è un’ottima soluzione.

Come considerazione finale, aggiungo che prima di scrivere questo post ho verificato che anche Ser.Val. ha risolto la falla segnalata, anche se non avevo ricevuto risposta. Risulta degno di nota il fatto che sul loro server la pagina di informazioni mostrava la presenza di PHP versione 5.6, che è quantomeno bizzarro. Come avevo già avuto modo di commentare su Facebook, PHP 5.6 è una versione fuori supporto dal 31 dicembre 2018 e sarebbe bene migrare prontamente ad una versione più recente, nello specifico PHP 7.2 o 7.3.

Come già scrivevo in questo post di due mesi fa, è bene che chi opera in questo settore prenda sul serio l’importanza della sicurezza informatica. Eventualmente facendo anche analizzare la propria infrastruttura software da un consulente esterno.

Cronologia della responsible disclosure

  • 11 gennaio 2019: scorgo la presenza di una potenziale vulnerabilità
  • 13 gennaio 2019: notifico i gestori dei due siti web coinvolti
  • 14 gennaio 2019: AmministrazioniComunali.it risponde confermando di aver risolto il problema
  • 16 gennaio 2019: mi accorgo che anche Ser.Val. ha modificato il sito, senza però rispondere
  • 20 gennaio 2019: pubblico questo articolo
  • 22 gennaio 2019: Ser.Val. risponde confermando di aver risolto il problema ed effettuato una verifica interna per verificare eventuali data breach, ai sensi del GDPR

Aggiornamento del 22 gennaio 2019: Ser.Val. ha risposto alla mia segnalazione dopo la pubblicazione di questo post, ringraziandomi e descrivendo le contromisure che hanno adottato. Il contenuto del post è stato modificato per tenere conto di questa risposta.

10 pensieri riguardo “Come ti distruggo il sito web con una fattura elettronica

  1. Le condizione della rete in Italia non si smentisce mai. Pressappochismo, indifferenza per l’utente, mancati aggiornamenti.
    Bravo a segnalare le differenze con il mondo reale della rete.

  2. Ottimo articolo, complimenti davvero.
    Comunque sia la fatturazione elettronica esclude i contribuenti minimi, comunque già dal 2008 ho sempre emesso le fatture in formato PDF con il gestionale Invoicex.
    Quindi sono ormai 11 anni che adotto tale sistema ma in ogni caso spero di farla finita presto con l’Italia in quanto sto lavorando per andare altrove.

    1. Grazie per i complimenti!

      Anche io sarei escluso dall’obbligo, ma l’ho adottata per scelta. 😀 Sinceramente, non riesco a capire come alcune aziende non colgano i vantaggi. Si fanno solo spaventare dal formato XML (che a loro in realtà non dovrebbe neanche importare troppo di capire) senza apprezzare lo snellimento burocratico e il dover evitare di conservare stampe.

      Attenzione a non confondere la fatturazione elettronica con le fatture in PDF, che sono due cose completamente diverse. Lo preciso nel caso qualcuno possa fraintendere il senso del tuo commento. 😉

  3. Ciao Andrea, questo tuo articolo dimostra una volta di piu` quanto sia “eroico” per i liberi professionisti scegliere di lavorare in italia (io me ne sono andato da anni).

  4. Penso sempre di piu’ che essere iscritto a questa mailing list sia un’occasione di apprendimento continuo; complimenti.
    Anche in questo caso ho trovato una risposta ad un quesito che nessuno era finora riuscito a risolvere e cioè l’apertura degli allegati negli xml. (nemmeno il famoso corriere nazionale che mi aveva spedito la prima fattura con allegato sapeva come risolverne l’apertura ed ha deciso di far seguire una mail con il pdf a tutti ii clienti…).
    Anche perchè l’agenzia delle entrate, stranamente, non è chiara.
    Unico appunto che mi sento di fare, da vecchio ragioniere con esperienza sul campo da piu’ di 35 anni, è sulla effettiva validita’ della fattura elettroinca in merito allo snellimento delle procedure.
    Riguardo poi al contrasto della evasione fiscale tralascio ogni commento perchè ritengo he quelli che vorranno aggirare il sistema di certo non si lasceranno intimidire da un simile ostacolo.
    Ma tornando al merito dello snellimento mancato, faccio un esempio di una fornitura di merci.
    Comunque viene emesso un ddt cartaceo per la spedizione ed nel 99% dei casi una fattura proforma, senza valore fiscale, per permettere al cliente di fare una verifica della merce ricevuta e dei prezzi praticati. Poi questi dovra’ verificare che la fattura elettroncia ricevuta (5 gg concessi di di tempo dalla emissione all’inoltro) collimi con la proforma …….per me questo non è lavorare razionalmente. D’altronde siamo di fronte a software Sogei e questo basta per dirla tutta.

  5. Silvio, eheh vabbè dai eroico mi sembra esagerato. 😀

    Marco, grazie per i complimenti. 🙂 Riguardo alla semplificazione delle procedure, naturalmente io non sono un ragioniere né un commercialista, ma ragiono in modo “terra terra” su alcuni punti interessanti:

    • abolizione dello spesometro
    • abolizione del modello intrastat vendite
    • ricezione automatica di tutte le fatture di acquisto in un unico posto
    • fine dell’obbligo di tenere registri cartacei e stampe di tutte le fatture
    • interoperabilità delle fatture tra software di produttori diversi

    È vero che per alcuni contribuenti alcuni obblighi non c’erano neanche prima, ma avere i dati in modalità elettronica e standard dà molti vantaggi.

    Da quel che ne so i DDT non sono obbligatori, idem per i proforma che non hanno valore fiscale e comunque nessuno obbliga a stamparli (anzi, che nel 2019 si stampino ancora documenti che potrebbero essere PDF lo trovo piuttosto assurdo).

  6. Sinceramente, con tutti i pacchi che spariscono, preferisco spedire con ddt, almeno mi rimane una ricevuta firmata di quanto ritirato dal corriere.
    Poi, riguardo alla eliminazione del cartaceo faccio un esempio: se sono in contabilita’ ordinaria la fattura ricevuta non si deve solo registrare ai fini iva (ci pensa questa innovativa procedura) ma deve essere pure messa come voce di costo ai fini del bilancio. Ora, personalmente, fare una scrittura contabile basandomi su un file con un nome non intelligibile , piazzato nella cartella pinco pallino, per favore anche no.
    Capita che ci sia qualche verifica e/o contestazione ( come ne succedono spesso) vado a cercare a “vattelapesca”?
    No grazie; quindi le fatture ricevute si continueranno a stampare (con le solite inefficienti stampanti da uso ufficio) ed a numerare progressivamente per fini contabili.
    Confermato anche dai commercialisti con cui ho parlato.
    Ergo: hanno deciso di incasinare la vita a tutti gli onesti perchè non sanno (o non vogliono?) beccare i veri ladri.
    C’è pure un bel video di una commissione parlamentare che tratta questi argomenti; di fronte ai quali il gran capo dell’Agenzia delle Entrate non ha saputo replicare.
    Comunque staremo a vedere se sara’ vero che l’anno prossimo la faccenda sara’ adottata a livello Europeo….sara’ il tripudio della burocrazia in chiave europea.
    Il resto del mondo se la ridera’ finche’ ci soffocheremo con le nostre mani.
    Il tutto senza intento polemico; se poi dovessimo parlare delle partite iva che vengono chiuse da tutti coloro che sono stufi di questa situazione, buttando alle ortiche fior fiore di professionalita’ frutto di anni di lavoro, perchè nell’attuale pessima congiuntura questi se ne escono con le “innovazioni telematiche in salsa burocratese” ,utili a far passare la voglia anche al piu’ incallito stakanovista,…finirei o.t.

  7. fare una scrittura contabile basandomi su un file con un nome non intelligibile , piazzato nella cartella pinco pallino, per favore anche no.
    Capita che ci sia qualche verifica e/o contestazione (come ne succedono spesso) vado a cercare a “vattelapesca”?

    No be’ OK, se poi vogliamo dirla tutta il file piazzato nella cartella esattamente come la fattura stampata su un foglio non ha nessun valore legale, l’unica cosa che vale è la fattura in conservazione a norma di legge.

    Io comunque mi riferivo solo ed esclusivamente a stampe obbligatorie, se poi uno preferisce avere anche stampe non imposte per legge non sto a sindacare. 😀

    hanno deciso di incasinare la vita a tutti gli onesti perchè non sanno (o non vogliono?) beccare i veri ladri

    Personalmente non mi sento incasinato, anzi. Vabbè, io sono una realtà piccola, immagino solo la comodità di ricevere tutte le fatture d’acquisto in un unico posto per una grande azienda che fa un sacco di transazioni.

    staremo a vedere se sara’ vero che l’anno prossimo la faccenda sara’ adottata a livello Europeo

    Magari! 😀 Per ora esistono solo alcune realtà che sono un po’ meno arretrate della carta, ma sono piuttosto circoscritte (principalmente i paesi nordici… e ora anche noi).

    Il resto del mondo se la ridera’ finche’ ci soffocheremo con le nostre mani.

    Diciamo che in ambito internazionale si discute di sistemi EDI dagli anni 80.

    In ogni caso direi che siamo partiti decisamente per la tangente. 😛 Il post aveva l’obiettivo di trattare un attacco potenzialmente attuabile su due siti che visualizzano fatture elettroniche. Spero che l’intento sia stato raggiunto, altrimenti lascio sempre aperta l’area commenti per chiedere eventuali delucidazioni. 🙂

  8. Come dipendente pubblico uso la fattura elettronica dal 2016 (cioè da quando sono stato trasferito in un ufficio che se ne occupa) e condivido tutto il tuo entusiasmo per questo strumento.
    Per quanto ci riguarda, il problema del “lettore software” che trasforma l’XML in qualcosa di intellegibile da un comune impiegato è stato risolto inserendo tale strumento nel software documentale che traduce in PDF la fattura elettronica, oltre, ovviamente, a mostrare gli eventuali allegati base64.
    Ricordo, però, che quando partì l’obbligo per le P.A. mi fu chiesto se conoscessi qualche software che assolvesse questo compito: da ignorante in materia di fatturazione, risposi che, essendo un XML, un programma specifico probabilmente non esisteva ancora, ma sarebbe stato molto facile implementarlo. A qualche anno di distanza vedo che le cose sono andate effettivamente in questa direzione.
    Quanto al bug segnalato, io avrei adottato la soluzione due, magari inserendo i PDF in una cartella gestita da un server (intesto come software) completamente diverso; un semplice server HTTP che deve semplicemente rispondere a richieste di GET. Questo perché con la whitelist vai sempre incontro al rischio di avere qualche fattura con allegati di un formato non previsto.
    Si tratta di uno scrupolo forse eccessivo (in tre anni ho avuto sempre allegati PDF), ma se il mio scopo è fare un sito per tutti allora forse è meglio gestire tutti i casi possibili.
    Ciao e complimenti per l’indagine.

  9. risposi che, essendo un XML, un programma specifico probabilmente non esisteva ancora, ma sarebbe stato molto facile implementarlo. A qualche anno di distanza vedo che le cose sono andate effettivamente in questa direzione.

    Sono completamente d’accordo e credo che fosse quella l’intenzione del legislatore. Se fosse stato proposto un formato proprietario per le fatture ci sarebbero state numerose perplessità in tema di trasparenza dei dati, inutili complicazioni tecniche e così via. 🙂

    Questo perché con la whitelist vai sempre incontro al rischio di avere qualche fattura con allegati di un formato non previsto.

    Sì ma non è necessariamente un male. Per fare un esempio, mostrare allegati in HTML non sarebbe un rischio per il sito web, ma potrebbe fornire un mezzo semplice ed efficace per organizzare campagne di phishing.

    Permettere il caricamento di file exe consentirebbe (potenzialmente) di distribuire del malware, col rischio di far finire tutto il sito nella lista siti dannosi di Google o Web Of Trust… insomma, da un certo punto di vista la whitelist è la scelta più cauta. 😀

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *