Outils et scripts IA
Vérification de sécurité du code C et C++
Vérifiez le code C et C++, les sketches Arduino et les builds CMake : gets(), commandes shell construites à partir d'entrées, printf(msg), scanf %s, vérifications TLS désactivées, mots de passe et clés dans le code, jetons aléatoires faibles et options de durcissement supprimées.
Ce que vous recevez : 1 fichier · 64.22 KB · ZIP
Voir les options d'achatDescription du produit
Un programme de mise à jour de firmware qui règle CURLOPT_SSL_VERIFYPEER sur 0 "parce que l'horloge de l'appareil est fausse" installe tout ce qu'un réseau Wi-Fi hostile lui envoie. Un utilitaire de ping qui construit "ping -c 1 %s" avec snprintf et le passe à system() exécute n'importe quelle commande saisie après un point-virgule, et un appel de journalisation écrit printf(msg) permet à un %n dans ce message d'écrire en mémoire. Ce skill détecte ces erreurs et les autres erreurs C et C++ ci-dessous avant la mise en production du code, et vous indique comment corriger chacune d'elles.
Votre agent exécute un scanner sur vos fichiers .c, .h, .cpp, .cc, .hpp et Arduino .ino ainsi que sur CMakeLists.txt, *.cmake, les Makefiles, meson.build et les fichiers Visual Studio .vcxproj. Il comprend les commentaires, les littéraux de chaîne et de caractère (y compris les chaînes brutes et les séparateurs de chiffres), ignore les blocs #if 0 et les dossiers de dépendances embarquées ou de gestionnaires de paquets comme third_party, .pio et managed_components, distingue les appels des déclarations et des appels de membres, et suit une commande à travers les variables locales : ainsi, char cmd[] = "clear"; system(cmd); n'est pas signalé, alors qu'un nom d'hôte formaté dans "ping -c 1 %s" l'est. Pour TLS, il vérifie si le code est un client ou un serveur : SSL_VERIFY_NONE dans un serveur qui ne demande pas de certificats clients n'est donc pas signalé, et une désactivation derrière un paramètre insecure ou debug est un point à revoir, pas un point bloquant. Les identifiants ne sont bloquants que lorsque leur nature est certaine (un mot de passe passé à WiFi.begin ou à CURLOPT_USERPWD, une chaîne de connexion, une clé privée, un format de clé connu, une clé qui semble générée) ; un littéral que seul son nom désigne comme secret est un point à revoir. Il ne compile ni n'exécute jamais votre code. Il renvoie BLOCK, REVIEW ou NOT FLAGGED, avec le fichier, la ligne, la raison et une approche plus sûre. Les secrets ne sont jamais affichés.
Ce qu'il vérifie
BLOCK (à corriger avant la mise en production)
- C01 : appels de gets() (ainsi que std::gets et _getws)
- C02 : system(), popen(), leurs variantes Windows et execl("/bin/sh", "sh", "-c", cmd) avec une commande construite à l'exécution : une valeur formatée ou concaténée dans une commande fixe, ou une commande issue de argv, de getenv ou d'une lecture
- C03 : appels de la famille printf (printf, fprintf, snprintf, syslog, dprintf et autres) dont le format n'est pas un littéral et qui n'ont aucun autre argument
- C04 : scanf et fscanf lisant %s ou %[ sans largeur de champ
- C05 : vérifications TLS désactivées dans le code client : VERIFYPEER ou VERIFYHOST de libcurl réglés sur 0, SSL_VERIFY_NONE, ssl::verify_none, QSslSocket::VerifyNone ou MBEDTLS_SSL_VERIFY_NONE dans un client, callbacks de vérification qui acceptent toujours, options de cpp-httplib et cpr, setInsecure() d'ESP32 et skip_cert_common_name_check d'ESP-IDF, flags d'ignorance de WinHTTP et SChannel, TLS_VERIFY OFF dans CMake
- C06 : identifiants dont la nature est certaine : mots de passe passés à WiFi.begin, mysql_real_connect, CURLOPT_USERPWD ou à un wifi_config d'ESP-IDF, chaînes de connexion, mots de passe dans la partie user-info des URL, en-têtes Authorization, clés privées PEM, formats de clé connus et clés qui semblent générées sous un nom de secret
REVIEW (à vérifier avant la publication)
- C11 : strcpy, strcat, sprintf avec %s, vsprintf et sscanf %s copiant une chaîne de longueur inconnue dans un tampon de taille fixe
- C12 : rand(), random(), drand48() ou std::mt19937 utilisés pour créer des jetons, des identifiants de session, des clés, des sels, des nonces ou des IV
- C13 : mktemp, tmpnam et tempnam
- C14 : fichiers de build qui désactivent le durcissement : -fno-stack-protector, -z execstack, -z norelro, -D_FORTIFY_SOURCE=0, -no-pie, -Wno-format-security, MSVC /GS-, /DYNAMICBASE:NO et les paramètres Visual Studio correspondants
- C15 : mots de passe hachés avec MD5, SHA-1 ou SHA-2 au lieu d'une fonction de hachage de mots de passe
- C16 : vérifications TLS incomplètes : clients OpenSSL qui n'activent jamais SSL_VERIFY_PEER ou ne vérifient jamais le nom d'hôte, clients Boost.Asio sans verify_peer ni vérification du nom d'hôte, ignoreSslErrors() de Qt sans liste, et désactivations derrière un paramètre
- C17 : memset, bzero ou ZeroMemory effaçant un tampon de mot de passe ou de clé cryptographique, ce que le compilateur peut supprimer
- C18 : dépendances CMake FetchContent, ExternalProject et CPM sur une branche ou sans tag, téléchargements URL sans URL_HASH, et file(DOWNLOAD) sans EXPECTED_HASH
- C19 : littéraux que seul un nom de mot de passe, de jeton ou de clé désigne comme secrets, comparaisons de mots de passe avec une valeur fixe, et identifiants dans un en-tête de secrets ignoré par git comme arduino_secrets.h
- C20 : system(), popen() ou sh -c avec une commande issue d'un paramètre, d'un membre ou d'un résultat de fonction que le scanner ne peut pas suivre
Ce qui est inclus
- Le scanner (Python 3.9+, bibliothèque standard uniquement)
- Un guide des règles avec la raison, l'approche plus sûre et un lien vers la documentation (SEI CERT C, OpenSSF, libcurl, OpenSSL, OWASP, CMake) pour chaque règle
- Un projet d'exemple à risque et un projet sûr, ainsi que le rapport réel produit par le scanner sur le projet à risque
Limites
Il lit chaque fichier comme du texte, sans exécuter le préprocesseur : les macros ne sont pas développées, toutes les branches #if sauf #if 0 sont lues, et les tailles de tampon et les valeurs construites dans d'autres fonctions ou fichiers ne sont pas connues ; les commandes ne sont suivies qu'à travers les variables locales et de niveau fichier. Les options du compilateur définies en dehors des fichiers analysés (scripts CI, presets CMake, variables d'environnement) ne sont pas vues. Les fichiers Objective-C et CUDA ne sont pas lus. L'exemple https.c de curl lui-même est signalé pour revue, car son option de build SKIP_PEER_VERIFICATION peut désactiver les vérifications. NOT FLAGGED n'est pas une garantie ; conservez aussi les avertissements du compilateur, les sanitizers et un analyseur statique complet dans votre build.
Contenu
Un fichier ZIP contenant 27 fichiers : SKILL.md, le scanner dans scripts/ (9 fichiers Python), references/rules.md (chaque règle avec sa raison et l'approche plus sûre), et examples/ (15 fichiers d'exemple plus report.md, la sortie réelle du scanner sur l'exemple à risque).
Mode d'emploi : Il s'agit d'un skill d'agent : un dossier contenant un fichier SKILL.md et des scripts Python qu'un agent de codage IA comme Claude Code, Cursor ou Codex CLI peut exécuter. Décompressez-le dans le dossier des skills de votre agent (pour Claude Code : ~/.claude/skills/), puis demandez à votre agent de vérifier votre projet. Les scripts fonctionnent aussi seuls avec Python 3.9 ou plus récent, sans rien à installer. Ils se contentent de lire vos fichiers : aucun accès réseau, et rien n'est envoyé nulle part.
Ce que vous recevez
1 fichier · 64.22 KB
- c-cpp-code-safety-check-1.0.0.zipZIP · 64.22 KB
Outils et scripts IA
Vérification de sécurité du code C et C++
Vérifiez le code C et C++, les sketches Arduino et les builds CMake : gets(), commandes shell construites à partir d'entrées, printf(msg), scanf %s, vérifications TLS désactivées, mots de passe et clés dans le code, jetons aléatoires faibles et options de durcissement supprimées.
Getly a ouvert les fichiers envoyés et n'a rien trouvé qui empêche leur ouverture. Ce n'est ni une analyse antivirus ni une note de qualité.
Tags
Questions fréquentes
Ai-je accès au produit immédiatement ?
Oui. C'est un produit numérique : vous pouvez le télécharger juste après le paiement, directement depuis votre bibliothèque.
Puis-je l'utiliser pour des projets commerciaux ?
Oui. L'usage commercial est autorisé : utilisez-le dans votre propre activité et dans ce que vous vendez. Vous ne pouvez pas revendre ni redistribuer le fichier lui-même.
Quelle est votre politique de remboursement ?
Vous pouvez demander un remboursement dans un délai de 30 jours. Si quelque chose ne va pas, demandez-le depuis votre commande et l'équipe Getly l'examine.
Quels formats et quelles tailles de fichier vais-je recevoir ?
Vous téléchargerez 1 fichier - ZIP - 64.22 KB au total.
Ai-je droit aux mises à jour gratuites ?
Oui : quand le vendeur publie une nouvelle version, vous pouvez retélécharger les derniers fichiers depuis votre bibliothèque sans frais. Consultez le journal des modifications pour les dernières mises à jour.
Prix
$5.00



