Il caricamento dinamico delle classi è una funzionalità a runtime che consente al software di caricare codice solo quando serve, invece che all'avvio. In Java e in ambienti simili, un'applicazione può leggere il nome di una classe da una configurazione, da un connettore di database o da un altro input e poi istanziare quella classe al volo.
Questo è utile per plugin, driver e sistemi modulari, ma diventa pericoloso quando il nome della classe caricata o il percorso di ricerca sono influenzati da un attaccante. Se la convalida degli input è debole, un avversario può reindirizzare l'applicazione verso codice inatteso, attivare metodi non sicuri o arrivare all'esecuzione all'interno di un processo server privilegiato. I difensori riducono il rischio codificando in modo fisso le classi consentite, usando allowlist rigorose, evitando configurazioni non attendibili per i percorsi di codice e limitando i privilegi del processo che esegue il caricamento.


