OGNL (Object-Graph Navigation Language) è un linguaggio di espressioni Java usato da Apache Struts per leggere e impostare proprietà degli oggetti, chiamare metodi e valutare espressioni dinamiche. È potente per costruire applicazioni web flessibili, ma diventa rischioso quando input controllato dall'attaccante viene inserito nella valutazione delle espressioni.
In un'applicazione Struts, OGNL viene spesso utilizzato dietro i tag, il mapping delle azioni e il data binding. Se un'applicazione consente a testo non attendibile di raggiungere un contesto OGNL, un attaccante può tentare un'iniezione di espressioni per accedere a oggetti inattesi o eseguire metodi pericolosi, il che può portare a esecuzione di codice remoto o esposizione di dati. I difensori riducono questo rischio aggiornando Struts, evitando percorsi di richiesta deprecati o legacy, limitando la valutazione dinamica e convalidando o rifiutando l'input prima che raggiunga le parti interne del framework. In pratica, OGNL non è il problema di per sé; il pericolo deriva dal fidarsi dell'input dell'utente all'interno di un linguaggio progettato per essere eseguibile.


