KI-Tools & -Skripte
Sicherheitsprüfung für C- und C++-Code
Prüfen Sie C- und C++-Code, Arduino-Sketches und CMake-Builds auf gets(), aus Eingaben gebaute Shell-Befehle, printf(msg), scanf %s, abgeschaltete TLS-Prüfungen, Passwörter und Schlüssel im Code, schwache Zufallstokens und entfernte Härtungs-Flags.
Das bekommst du: 1 Datei · 64.22 KB · ZIP
Kaufoptionen ansehenProduktbeschreibung
Ein Firmware-Updater, der CURLOPT_SSL_VERIFYPEER auf 0 setzt, "weil die Uhr des Geräts falsch geht", installiert alles, was ihm ein feindliches WLAN schickt. Ein Ping-Helfer, der "ping -c 1 %s" mit snprintf zusammenbaut und an system() übergibt, führt jeden Befehl aus, der nach einem Semikolon eingegeben wird, und ein als printf(msg) geschriebener Log-Aufruf erlaubt es, dass %n in dieser Nachricht in den Speicher schreibt. Dieser Skill findet diese und die anderen unten aufgeführten C- und C++-Fehler, bevor der Code ausgeliefert wird, und sagt Ihnen, wie Sie jeden davon beheben.
Ihr Agent führt einen Scanner auf Ihren .c-, .h-, .cpp-, .cc-, .hpp- und Arduino-.ino-Dateien sowie auf CMakeLists.txt, *.cmake, Makefiles, meson.build und Visual-Studio-.vcxproj-Dateien aus. Er versteht Kommentare, String- und Zeichenliterale (einschließlich Raw-Strings und Zifferntrennzeichen), überspringt #if 0-Blöcke sowie mitgelieferte oder vom Paketmanager verwaltete Ordner wie third_party, .pio und managed_components, unterscheidet Aufrufe von Deklarationen und Member-Aufrufen und verfolgt einen Befehl über lokale Variablen, sodass char cmd[] = "clear"; system(cmd); nicht gemeldet wird, ein in "ping -c 1 %s" formatierter Hostname dagegen schon. Bei TLS prüft er, ob der Code ein Client oder ein Server ist, sodass SSL_VERIFY_NONE in einem Server, der keine Client-Zertifikate anfordert, nicht gemeldet wird, und eine Abschaltung hinter einer Insecure- oder Debug-Einstellung ist ein Prüfpunkt, kein Blocker. Zugangsdaten sind nur dann ein Blocker, wenn ihre Bedeutung eindeutig ist (ein an WiFi.begin oder CURLOPT_USERPWD übergebenes Passwort, ein Connection-String, ein privater Schlüssel, ein bekanntes Schlüsselformat, ein generiert aussehender Schlüssel); ein Literal, das nur durch seinen Namen als geheim gekennzeichnet ist, ist ein Prüfpunkt. Er kompiliert oder führt Ihren Code niemals aus. Er liefert BLOCK, REVIEW oder NOT FLAGGED mit Datei, Zeile, Begründung und einem sichereren Ansatz. Geheimnisse werden niemals ausgegeben.
Was geprüft wird
BLOCK (vor der Auslieferung beheben)
- C01: Aufrufe von gets() (auch std::gets und _getws)
- C02: system(), popen(), ihre Windows-Varianten und execl("/bin/sh", "sh", "-c", cmd) mit einem zur Laufzeit zusammengesetzten Befehl: ein Wert, der in einen festen Befehl formatiert oder angehängt wird, oder ein Befehl aus argv, getenv oder einem Lesevorgang
- C03: Aufrufe der printf-Familie (printf, fprintf, snprintf, syslog, dprintf und andere), deren Format kein Literal ist und die keine weiteren Argumente haben
- C04: scanf und fscanf, die %s oder %[ ohne Feldbreite lesen
- C05: abgeschaltete TLS-Prüfungen im Client-Code: libcurl VERIFYPEER oder VERIFYHOST auf 0, SSL_VERIFY_NONE, ssl::verify_none, QSslSocket::VerifyNone oder MBEDTLS_SSL_VERIFY_NONE in einem Client, Verify-Callbacks, die immer akzeptieren, Schalter in cpp-httplib und cpr, ESP32 setInsecure() und ESP-IDF skip_cert_common_name_check, Ignore-Flags von WinHTTP und SChannel, CMake TLS_VERIFY OFF
- C06: Zugangsdaten mit eindeutiger Bedeutung: Passwörter, die an WiFi.begin, mysql_real_connect, CURLOPT_USERPWD oder eine ESP-IDF-wifi_config übergeben werden, Connection-Strings, Passwörter im User-Info-Teil von URLs, Authorization-Header, private PEM-Schlüssel, bekannte Schlüsselformate und generiert aussehende Schlüssel unter einem geheimen Namen
REVIEW (vor dem Release prüfen)
- C11: strcpy, strcat, sprintf mit %s, vsprintf und sscanf %s, die einen String unbekannter Länge in einen Puffer fester Größe kopieren
- C12: rand(), random(), drand48() oder std::mt19937 zur Erzeugung von Tokens, Session-IDs, Schlüsseln, Salts, Nonces oder IVs
- C13: mktemp, tmpnam und tempnam
- C14: Build-Dateien, die Härtungsmaßnahmen abschalten: -fno-stack-protector, -z execstack, -z norelro, -D_FORTIFY_SOURCE=0, -no-pie, -Wno-format-security, MSVC /GS-, /DYNAMICBASE:NO und die entsprechenden Visual-Studio-Einstellungen
- C15: Passwörter, die mit MD5, SHA-1 oder SHA-2 statt mit einem Passwort-Hash gehasht werden
- C16: unvollständige TLS-Prüfungen: OpenSSL-Clients, die SSL_VERIFY_PEER nie aktivieren oder den Hostnamen nie prüfen, Boost.Asio-Clients ohne verify_peer oder Hostnamen-Prüfung, Qt ignoreSslErrors() ohne Liste sowie Abschaltungen hinter einer Einstellung
- C17: memset, bzero oder ZeroMemory, die einen Puffer mit Passwort oder Kryptoschlüssel löschen, was der Compiler entfernen kann
- C18: CMake-Abhängigkeiten über FetchContent, ExternalProject und CPM auf einem Branch oder ohne Tag, URL-Downloads ohne URL_HASH und file(DOWNLOAD) ohne EXPECTED_HASH
- C19: Literale, die nur durch einen Passwort-, Token- oder Schlüsselnamen als geheim gekennzeichnet sind, Passwortvergleiche mit einem festen Wert und Zugangsdaten in einem von git ignorierten Secrets-Header wie arduino_secrets.h
- C20: system(), popen() oder sh -c mit einem Befehl aus einem Parameter, Member oder Funktionsergebnis, dem der Scanner nicht folgen kann
Was enthalten ist
- Der Scanner (Python 3.9+, nur Standardbibliothek)
- Ein Regelleitfaden mit Begründung, sichererem Ansatz und Dokumentationslink (SEI CERT C, OpenSSF, libcurl, OpenSSL, OWASP, CMake) für jede Regel
- Ein riskantes und ein sicheres Beispielprojekt sowie der echte Bericht, den der Scanner für das riskante erzeugt
Grenzen
Er liest jede Datei als Text, ohne den Präprozessor auszuführen: Makros werden nicht expandiert, jeder #if-Zweig außer #if 0 wird gelesen, und Puffergrößen und Werte, die in anderen Funktionen oder Dateien erzeugt werden, sind nicht bekannt; Befehle werden nur über lokale Variablen und Variablen auf Dateiebene verfolgt. Compiler-Flags, die außerhalb der gescannten Dateien gesetzt werden (CI-Skripte, CMake-Presets, Umgebungsvariablen), werden nicht erkannt. Objective-C- und CUDA-Dateien werden nicht gelesen. Das eigene https.c-Beispiel von curl wird zur Prüfung gemeldet, weil dessen Build-Schalter SKIP_PEER_VERIFICATION die Prüfungen abschalten kann. NOT FLAGGED ist keine Garantie; behalten Sie Compiler-Warnungen, Sanitizer und einen vollständigen statischen Analyzer ebenfalls in Ihrem Build.
Inhalt
Eine ZIP-Datei mit 27 Dateien: SKILL.md, der Scanner in scripts/ (9 Python-Dateien), references/rules.md (jede Regel mit Begründung und sichererem Ansatz) und examples/ (15 Beispieldateien plus report.md, die echte Scanner-Ausgabe für das riskante Beispiel).
Anwendung: Dies ist ein Agent-Skill: ein Ordner mit einer SKILL.md-Datei und Python-Skripten, die ein KI-Coding-Agent wie Claude Code, Cursor oder Codex CLI ausführen kann. Entpacken Sie ihn in den Skills-Ordner Ihres Agenten (für Claude Code: ~/.claude/skills/) und bitten Sie Ihren Agenten dann, Ihr Projekt zu prüfen. Die Skripte laufen auch eigenständig mit Python 3.9 oder neuer, ohne dass etwas installiert werden muss. Sie lesen nur Ihre Dateien: kein Netzwerkzugriff, und nichts wird irgendwohin gesendet.
Das bekommst du
1 Datei · 64.22 KB
- c-cpp-code-safety-check-1.0.0.zipZIP · 64.22 KB
KI-Tools & -Skripte
Sicherheitsprüfung für C- und C++-Code
Prüfen Sie C- und C++-Code, Arduino-Sketches und CMake-Builds auf gets(), aus Eingaben gebaute Shell-Befehle, printf(msg), scanf %s, abgeschaltete TLS-Prüfungen, Passwörter und Schlüssel im Code, schwache Zufallstokens und entfernte Härtungs-Flags.
Getly hat die hochgeladenen Dateien geöffnet und nichts gefunden, was das Öffnen verhindern würde. Das ist kein Virenscan und keine Qualitätsbewertung.
Tags
Häufige Fragen
Erhalte ich sofort Zugriff?
Ja. Dies ist ein digitales Produkt - du kannst es direkt nach dem Kauf aus deiner Bibliothek herunterladen.
Darf ich es für kommerzielle Projekte nutzen?
Ja. Kommerzielle Nutzung ist erlaubt: im eigenen Business und in dem, was du verkaufst. Die Datei selbst darfst du nicht weiterverkaufen oder verbreiten.
Wie sind die Rückerstattungsbedingungen?
Du kannst innerhalb von 30 Tagen eine Rückerstattung anfordern. Stimmt etwas nicht, fordere sie bei deiner Bestellung an - das Getly-Team prüft sie.
Welche Dateiformate und -größen erhalte ich?
Du lädst 1 Datei herunter - ZIP - insgesamt 64.22 KB.
Erhalte ich kostenlose Updates?
Ja - wenn der Verkäufer eine neue Version veröffentlicht, kannst du die aktuellen Dateien kostenlos erneut aus deiner Bibliothek herunterladen. Aktuelle Änderungen findest du im Changelog.
Preis
$5.00



