Introduzione
Grazie per aver utilizzato OWASP ServerlessGoat!
Questa applicazione serverless dimostra le vulnerabilità di sicurezza serverless comuni come descritto nella guida Serverless Security Top 10 Weaknesses https://github.com/puresec/sas-top-10.
ServerlessGoat è stato creato per i seguenti scopi educativi:
- Insegnare agli sviluppatori e ai professionisti della sicurezza i rischi e le debolezze comuni del livello applicativo serverless
- Educare su come le debolezze del livello applicativo serverless possono essere sfruttate
- Insegnare agli sviluppatori e ai professionisti della sicurezza le migliori pratiche di sicurezza serverless
Puoi trovare maggiori informazioni su WebGoat a: https://www.owasp.org/index.php/OWASP_Serverless_Goat
AVVISO 1: Questa applicazione contiene vulnerabilità. Usala solo per scopi di formazione.
AVVISO 2: Questo programma è solo per scopi educativi. Non tentare queste tecniche senza autorizzazione dei proprietari dell'applicazione.
NOTA: L'applicazione è stata sviluppata in modo tale da non mettere a rischio il tuo account AWS. Le vulnerabilità introdotte sono contenute nei confini di questa specifica applicazione. Tuttavia, gli utenti non sono incoraggiati a distribuire l'applicazione in ambienti di produzione.
Distribuzione
ServerlessGoat è una semplice applicazione AWS Lambda, che funge da servizio di conversione di file MS-Word .doc in testo semplice. Riceve un URL di un file .doc come input, e restituisce il testo all'interno del documento al chiamante dell'API.
L'applicazione è impacchettata e pubblicata per la distribuzione tramite il AWS Serverless Application Repository.
Passaggi per la distribuzione:
- Assicurati di aver effettuato l'accesso al tuo account AWS
- Clicca sul seguente link: AWS Serverless Application Repository
- Clicca 'Deploy'
- Clicca 'Deploy' (di nuovo)
- Aspetta finché non vedi il messaggio 'Your application has been deployed'
- Clicca su 'View CloudFormation Stack'
- Sotto 'Outputs' troverai l'URL per l'applicazione (WebsiteURL)
Cheat-Sheet
La guida completa delle lezioni (in fase di sviluppo) può essere trovata nel file LESSONS.md
I seguenti problemi di sicurezza esistono nell'applicazione:
- Iniezione di dati evento, che porta a iniezione di comandi OS (SAS-01)
- Gli utenti possono invocare l'API con un valore del parametro
document_url contenente comandi Linux OS. Ad esempio ; ls -LF
- Gestione impropria delle eccezioni e messaggi di errore dettagliati (SAS-10), che portano alla divulgazione di informazioni sensibili
- Ad esempio, invocare l'API senza il parametro richiesto restituirà uno stack trace/eccezione dettagliato
- Configurazione di distribuzione serverless insicura (SAS-03)
- Bucket S3 pubblicamente accessibile (il suo nome può essere scoperto dal sottodominio/prefisso dell'URL)
- Il parametro
document_url non è definito come parametro 'obbligatorio' in API gateway e può essere omesso
- Autorizzazioni e ruoli della funzione eccessivamente privilegiati, che portano a perdita di dati in una tabella DynamoDB (SAS-04)
- La funzione ha permessi CRUD sulla tabella Dynamo, che possono essere abusati per leggere dati sensibili o manipolare dati
- La funzione ha una policy FullAccess sul bucket S3, portando a manomissione dei dati e perdita di dati, ecc.
- Monitoraggio e logging inadeguati della funzione (SAS-05) - l'applicazione non registra correttamente attacchi ed errori a livello applicativo (può essere dimostrato tramite CloudWatch/CloudTrail)
- Dipendenze di terze parti insicure (SAS-06) - possono essere rilevate scansionando il progetto con uno strumento di scansione OSS
- Il pacchetto vulnerabile è
node-uuid
- Denial of Service a livello applicativo (SAS-08), che può essere facilmente dimostrato
- Un attaccante può invocare l'API ricorsivamente più volte, generando abbastanza istanze da raggiungere il limite di capacità riservata della funzione (che è impostato a 5). Per esempio:
https://i92uw6vw73.execute-api.us-east-1.amazonaws.com/Prod/api/convert?document_url=https%3A%2F%2Fi92uw6vw73.execute-api.us-east-1.amazonaws.com%2FProd%2Fapi%2Fconvert%3Fdocument_url...
Ringraziamenti
ServerlessGoat è stato inizialmente creato e contribuito a OWASP da Yuri Shapira e Ory Segal, PureSec.