Cas d'usage · Java
Audit de code Java : ce qu'Anatoly détecte.
Un agent qui lit chaque fichier .java de votre projet, comprend Spring, Jakarta EE, Quarkus ou Micronaut, et produit un rapport défendable sur la dette, la sécurité et la concurrence.
Les pièges spécifiques à Java
Java reste majoritaire en banque, assurance, défense et industrie. Trois classes de défauts dominent les audits que nous voyons passer.
1. Fuites de ressources non fermées
Connection, InputStream, ResultSet ouverts sans try-with-resources, ou avec un try-with-resources mal scopé (la ressource sort de la portée avant le close). SpotBugs détecte le cas simple. Anatoly détecte aussi le cas où la ressource est passée à un helper qui ne ferme pas, ou où le close est tenté dans un finally qui peut throw avant.
2. Désérialisation Java native non sécurisée
Pattern d'exécution de code à distance bien documenté (gadget chains type ysoserial). Une ObjectInputStream construite sur une entrée non fiable est une porte ouverte. Les CVE de la famille Log4Shell, Spring4Shell et leurs voisines partagent ce vecteur. Anatoly remonte les chaînes qui mènent une entrée externe à un readObject(), même via plusieurs couches d'abstraction.
3. Concurrence : races et deadlocks
HashMap partagé sans synchronisation, ordering de locks incohérent entre deux méthodes, double-checked locking sans volatile. Ces défauts ne se reproduisent pas en test unitaire et frappent en production sous charge. Anatoly les identifie par analyse sémantique des champs partagés et des sections critiques.
Ce qu'Anatoly détecte sur Java
- Fuites de ressources (Connection, Stream, ResultSet) cross-fichiers.
- Désérialisation non sécurisée et gadgets d'exécution.
- Races, deadlocks, double-checked locking incorrect, usage inadapté de
ConcurrentHashMapvsHashMap. - Injections SQL via
Statementau lieu dePreparedStatement. - Failles d'autorisation dans Spring Security (annotations manquantes, expressions SpEL trop permissives).
- Sur-ingénierie : factories de factories, AbstractBase hiérarchies de 5 niveaux, design patterns appliqués là où une fonction suffit.
- Duplication sémantique : deux services qui font la même chose avec des noms différents.
- Tests faibles : assertions vides, mocks qui se testent eux-mêmes, couverture nominale sans cas limites.
- Javadoc absente ou désynchronisée avec la signature.
Exemple de constat
# Finding · correction · NEEDS_FIX
File: src/main/java/com/acme/api/UserService.java:84
Symbol: UserService.loadFromCsv
Evidence:
FileInputStream fis = new FileInputStream(path);
InputStreamReader reader = new InputStreamReader(fis, "UTF-8");
// ... 12 lines of parsing ...
return parsed;
Reasoning:
fis et reader ne sont pas fermés. Si une exception survient pendant
le parsing (lignes 89-96), les descripteurs restent ouverts jusqu'au
GC. Sur un déploiement à fort débit, cela cause une saturation du
pool de descripteurs OS observée en prod (incident #2024-11).
Recommendation:
Utiliser try-with-resources:
try (FileInputStream fis = new FileInputStream(path);
InputStreamReader reader = new InputStreamReader(fis, UTF_8)) {
return parse(reader);
}Frameworks supportés
- Spring (Boot, Security, Data, Cloud) : annotations, beans, AOP, configuration. Anatoly comprend les conventions Spring (component scanning, profiles, conditional configuration).
- Jakarta EE : EJB, CDI, JPA, JAX-RS. Calibration sur les patterns d'entreprise classiques.
- Quarkus, Micronaut : frameworks cloud-native, compilation native via GraalVM. Audit spécifique aux reflective access et aux configurations build-time.
- Android : audit des activités, services et providers. Permissions, intents, fuites de Context.
Comparaison avec les outils Java établis
- SpotBugs, FindBugs (legacy) : analyse bytecode. Excellents sur les bugs catalogués. Manquent la sur-ingénierie, la duplication sémantique, et les problèmes de concurrence qui ne matchent pas un pattern connu.
- PMD, Checkstyle : règles de style et qualité de code. Pas de raisonnement sémantique cross-fichiers.
- SonarJava, Checkmarx : SAST sécurité avec couverture large des CVE. Manquent les chaînes d'attaque multi-fonctions et les jugements contextuels que les LLM tirent du contexte.
Anatoly est complémentaire des outils statiques : SpotBugs + Anatoly couvrent plus que chacun seul. Pour le comparatif complet, voir audit de code IA vs revue de code IA en 2026.