Peut-on confier à ChatGPT l’analyse sécurité d’une application ? Notamment, ChatGPT peut-il détecter efficacement des injections SQL par exemple dans du code java ?

Pour cela, testons le en utilisant le célèbre OWASP Benchmark (https://github.com/OWASP-Benchmark/BenchmarkJava) qui a l’avantage de fournir des exemples d’injection SQL, avec en prime une mention s’il existe un problème ou pas pour chaque cas de test.

Essayons d’abord le premier cas de test de type SQL injection (CWE-89). Le code source est en ligne : https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/src/main/java/org/owasp/benchmark/testcode/BenchmarkTest00008.java. Le fichier XML associé (https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/src/main/java/org/owasp/benchmark/testcode/BenchmarkTest00008.xml) mentionne bien qu’il existe une injection SQL dedans.

Posons la question à ChatGPT : Is there a SQL injection in the following java code: et en fournissant le code source complet.
La réponse arrive instantanément, et est correcte :

Réponse de ChatGPT

The code you provided is vulnerable to SQL injection. The variable « param » is being obtained from the request header « BenchmarkTest00008 » and is being appended to a SQL query without proper validation or escaping. An attacker could manipulate the value of this header to include malicious SQL code, potentially allowing them to access or modify sensitive data in the database.

Par ailleurs ChatGPT fournit en plus des conseils pertinents :
It is recommended that you use prepared statements with parameterized queries, or use an ORM framework that will handle escaping data for you, to protect against SQL injection.

Essayons maintenant un cas de test de type SQL injection (CWE-89) bien plus subtil. Le code source est en ligne : https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/src/main/java/org/owasp/benchmark/testcode/BenchmarkTest00104.java. Le fichier XML associé (https://github.com/OWASP-Benchmark/BenchmarkJava/blob/master/src/main/java/org/owasp/benchmark/testcode/BenchmarkTest00104.xml) mentionne qu’il n’existe pas d’injection SQL dedans. En raison bien sûr de la condition complexe dans le « if » de la ligne 69.

Posons la même question à ChatGPT.

Voici la réponse :

Réponse de ChatGPT

ChatGPT voit quand même une injection SQL car il n’a pas vu l’astuce pour ce cas complexe. Il n’obtiendra donc pas 100% au OWASP Benchmark. Seuls quelques rares outils spécialisés à base d’analyse dynamique de code sont capables de réussir ce genre de test difficile.