Détection de vulnérabilités avec CodeQL : nouvelles solutions

Un système d'analyse statique comme CodeQL est aujourd'hui l'un des outils les plus populaires pour identifier les failles de sécurité dans le code C/C++, mais ses requêtes continuent de commettre des erreurs : elles signalent du code inoffensif comme dangereux ou, pire, elles laissent passer de réelles vulnérabilités. Un nouveau cadre appelé ARQdécrit dans un document signé par Chunyi Wang, promet de corriger automatiquement ces défauts et d'améliorer considérablement le détection de vulnérabilités avec CodeQLsans avoir besoin d'ensembles de données étiquetés ou de modèles écrits à la main pour chaque type de bogue.

Points clés

  • ARQ affine automatiquement les requêtes CodeQL en utilisant l'exécution de programmes C/C++ synthétisés comme test de vérité terrain.
  • Le cadre a été corrigé 12 requêtes officielles de CodeQL avec trois LLM commerciaux : GPT-5.4, Claude-Sonnet-4.6 et Gemini-3.5-flash.
  • Les requêtes affinées localisent jusqu'à 119,8% de plus de vrais positifs, en maintenant une précision d'au moins 98,0%.
  • ARQ résolu trois problèmes GitHub ouvert du jusqu'au 27 mois dans le référentiel officiel CodeQL.
  • Requêtes améliorées découvertes deux nouveaux bugs dans les vraies bibliothèques libpng et zlib.

Limitations actuelles des requêtes CodeQL dans la détection des vulnérabilités C/C++

Le problème de départ est simple à comprendre mais difficile à résoudre : les requêtes CodeQL, bien qu'elles soient une norme consolidée pouranalyse statique C/C++ils ne saisissent pas toujours la réalité du code qu'ils analysent. Les analyseurs basés sur des requêtes encodent des modèles de code vulnérable et les comparent au code source, mais ce mécanisme de correspondance reste rigide face aux mille variations dans lesquelles un véritable bug peut se manifester.

Répartition des faux positifs et négatifs dans les requêtes existantes

Le document décrit deux types d'erreurs qui affectent les requêtes existantes : les faux positifs, qui signalent le code qui est réellement sûr comme vulnérable, et les faux négatifs, qui laissent passer de véritables vulnérabilités sans générer d'avertissements. Cette double contrainte est la raison pour laquelle de nombreuses équipes de sécurité continuent de devoir vérifier manuellement les résultats produits par les scanners automatisés, un travail qui consomme du temps et des ressources et réduit la confiance globale dans le système. analyse de sécurité du logiciel automatisé.

ARQ Framework : raffinement automatique des requêtes basé sur l'exécution

ARQ aborde le problème sous un angle différent de celui des méthodes précédentes : au lieu de corriger les requêtes basées sur des ensembles de données étiquetés ou sur l'historique des validations, il les teste par rapport à des programmes C/C++ spécialement générés et observe leur comportement d'exécution réel. Il s’agit d’une approche agentique qui déplace le centre de gravité de Amélioration des requêtes ARQ de la théorie à la preuve concrète.

Mécanisme d'identification des faiblesses des requêtes grâce à l'exécution de programmes synthétiques

L'idée centrale du framework est qu'un programme synthétisé expose la faiblesse d'une requête chaque fois que son exécution contredit le verdict de la requête. Si le programme est effectivement vulnérable mais que la requête reste silencieuse, il s'agit d'un défaut faux négatif ; si toutefois le programme est sûr mais que la requête déclenche quand même une alarme, le défaut est un faux positif. Cette comparaison entre théorie et pratique devient la preuve de vérité sur laquelle fonder la correction.

Cycle d'amélioration itératif avec LLM sans données étiquetées ni modèles de vulnérabilité

Une fois les écarts identifiés, ARQ démarre un cycle de raffinement confié à un grand modèle de langage, qui répare la requête en utilisant ces écarts comme référence. La différence par rapport aux méthodes précédentes est claire : vous n'avez pas besoin d'ensembles de données étiquetés, vous n'avez pas besoin d'un historique de validation et vous n'avez pas besoin de modèles écrits spécifiquement pour chaque catégorie de vulnérabilité. Il s'agit d'un processus d'optimisation de requêtes LLM qui se nourrit de preuves empiriques collectées à chaque itération.

Évaluation et impact des raffinements ARQ sur les requêtes CodeQL

Les chercheurs ont testé ARQ sur un cas concret et mesurable : douze requêtes CodeQL officielles soumises au processus de correction automatique, avec des résultats qui vont au-delà de la simple démonstration théorique et touchent à de vrais bugs déjà présents dans les bibliothèques populaires.

Résultats de raffinement avec GPT-5.4, Claude-Sonnet-4.6 et Gemini-3.5-flash

Pour vérifier l'efficacité du framework, l'article a testé trois modèles de langage commercial distincts : GPT-5.4, Claude-Sonnet-4.6 et Gemini-3.5-flash. Chacun de ces LLM a été utilisé pour piloter le cycle de raffinement sur les douze requêtes sélectionnées, un détail important car il démontre comment l'approche ne dépend pas d'un seul fournisseur ou d'une architecture de modèle spécifique.

Améliorations des performances sur les ensembles de données de référence Juliet v1.3 et FormAI v2

La comparaison entre les requêtes originales et celles affinées par ARQ a été réalisée sur les jeux de données Juliet v1.3 et FormAI v2, deux benchmarks de référence dans le secteur. Les données les plus significatives concernent les vrais positifs identifiés : les requêtes corrigées par ARQ détectent jusqu'à 119,8 % de plus que les versions originales, tout en conservant une précision d'au moins 98,0 % dans tous les tests. Des chiffres de cette ampleur changent concrètement le rapport coût-bénéfice d'un outil d'analyse statique C/C++ : davantage de bogues réels interceptés, sans une vague parallèle d'alertes inutiles à éliminer manuellement.

Correction de problèmes GitHub et découverte de nouveaux bugs dans libpng et zlib

L'impact pratique de l'ARQ ne s'est pas limité aux points de référence. Le framework a résolu trois problèmes restés ouverts dans le référentiel de requêtes officiel CodeQL sur GitHub, dont certains étaient en attente depuis 27 mois, signe qu'il s'agissait de défauts réels et persistants et non de cas marginaux. Plus pertinent encore pour ceux qui travaillent dans le domaine : les requêtes affinées ont découvert deux bogues inédits dans les bibliothèques libpng et zlib, deux composants logiciels utilisés dans d'innombrables projets à travers le monde.

C’est là que se mesure la valeur d’un framework comme ARQ : il ne suffit pas d’améliorer un score sur un ensemble de données académiques, il est important de trouver de réelles failles dans des logiciels déjà en production. Le fait qu'un outil créé pour corriger les requêtes d'analyse statique finisse par exposer des bogues qui ont été manqués pendant des années dans des bibliothèques largement étudiées comme libpng et zlib montre combien il reste encore de marge d'amélioration dans la génération actuelle d'outils d'analyse de sécurité logicielle, même ceux considérés comme matures et fiables.

FAQ

Quel problème ARQ tente-t-il de résoudre dans la détection des vulnérabilités C/C++ ?

ARQ traite les faux positifs et les faux négatifs des requêtes CodeQL existantes en les affinant automatiquement à l'aide des preuves recueillies lors de l'exécution de programmes synthétisés.

Comment ARQ identifie-t-il les faiblesses des requêtes CodeQL ?

ARQ détecte une faiblesse chaque fois que l'exécution d'un programme synthétisé contredit le verdict de la requête : un écart qui indique la présence de faux positifs ou de faux négatifs.

Quel rôle jouent les modèles de langage (LLM) dans le cadre ARQ ?

ARQ confie la réparation des requêtes à un cycle itératif basé sur LLM, exploitant les retours d'exécution sans avoir besoin de données étiquetées ou de modèles spécifiques au type de vulnérabilité.

Quelles améliorations concrètes ARQ a-t-il montré dans la correction des requêtes CodeQL ?

Les requêtes affinées par ARQ ont augmenté la détection des vrais positifs à 119,8 % tout en maintenant une précision d'au moins 98 %, en corrigeant trois problèmes GitHub de longue date et en découvrant deux nouveaux bogues dans de vraies bibliothèques.

Contenu créé avec l’aide de l’intelligence artificielle et de la révision éditoriale humaine.

Voir l’article original en italien