Herramientas y scripts de IA
Revisión de seguridad de código C y C++
Revisa código C y C++, sketches de Arduino y compilaciones de CMake en busca de gets(), comandos de shell construidos a partir de la entrada, printf(msg), scanf %s, comprobaciones TLS desactivadas, contraseñas y claves en el código, tokens aleatorios débiles y flags de endurecimiento eliminados.
Qué recibes: 1 archivo · 64.22 KB · ZIP
Ver opciones de compraDescripción del producto
Un actualizador de firmware que pone CURLOPT_SSL_VERIFYPEER a 0 "porque el reloj del dispositivo está mal" instala cualquier cosa que le envíe una red Wi-Fi hostil. Un asistente de ping que construye "ping -c 1 %s" con snprintf y lo pasa a system() ejecuta cualquier comando escrito después de un punto y coma, y una llamada de log escrita como printf(msg) permite que un %n en ese mensaje escriba en memoria. Esta skill encuentra esos errores y los demás errores de C y C++ que se indican abajo antes de que el código salga a producción, y te explica cómo corregir cada uno.
Tu agente ejecuta un escáner sobre tus archivos .c, .h, .cpp, .cc, .hpp y .ino de Arduino, y sobre CMakeLists.txt, *.cmake, Makefiles, meson.build y archivos .vcxproj de Visual Studio. Entiende los comentarios, los literales de cadena y de carácter (incluidas las cadenas raw y los separadores de dígitos), omite los bloques #if 0 y las carpetas de terceros o de gestores de paquetes como third_party, .pio y managed_components, distingue las llamadas de las declaraciones y de las llamadas a miembros, y sigue un comando a través de variables locales, de modo que char cmd[] = "clear"; system(cmd); no se reporta, mientras que un nombre de host formateado en "ping -c 1 %s" sí. Para TLS comprueba si el código es un cliente o un servidor, así que SSL_VERIFY_NONE en un servidor que no pide certificados de cliente no se reporta, y una desactivación detrás de una opción insecure o debug es un punto de revisión, no un bloqueo. Las credenciales solo bloquean cuando su significado es seguro (una contraseña pasada a WiFi.begin o CURLOPT_USERPWD, una cadena de conexión, una clave privada, un formato de clave conocido, una clave con aspecto de generada); un literal que solo su nombre marca como secreto es un punto de revisión. Nunca compila ni ejecuta tu código. Devuelve BLOCK, REVIEW o NOT FLAGGED, con el archivo, la línea, el motivo y una alternativa más segura. Los secretos nunca se muestran.
Qué comprueba
BLOCK (corregir antes de publicar)
- C01: llamadas a gets() (también std::gets y _getws)
- C02: system(), popen(), sus variantes de Windows y execl("/bin/sh", "sh", "-c", cmd) con un comando construido en tiempo de ejecución: un valor formateado o concatenado en un comando fijo, o un comando procedente de argv, getenv o una lectura
- C03: llamadas de la familia printf (printf, fprintf, snprintf, syslog, dprintf y otras) cuyo formato no es un literal y que no tienen otros argumentos
- C04: scanf y fscanf que leen %s o %[ sin ancho de campo
- C05: comprobaciones TLS desactivadas en código cliente: VERIFYPEER o VERIFYHOST de libcurl a 0, SSL_VERIFY_NONE, ssl::verify_none, QSslSocket::VerifyNone o MBEDTLS_SSL_VERIFY_NONE en un cliente, callbacks de verificación que siempre aceptan, opciones de cpp-httplib y cpr, setInsecure() de ESP32 y skip_cert_common_name_check de ESP-IDF, flags de omisión de WinHTTP y SChannel, TLS_VERIFY OFF de CMake
- C06: credenciales cuyo significado es seguro: contraseñas pasadas a WiFi.begin, mysql_real_connect, CURLOPT_USERPWD o a un wifi_config de ESP-IDF, cadenas de conexión, contraseñas en la parte de información de usuario de las URL, cabeceras Authorization, claves privadas PEM, formatos de clave conocidos y claves con aspecto de generadas bajo un nombre de secreto
REVIEW (revisar antes del lanzamiento)
- C11: strcpy, strcat, sprintf con %s, vsprintf y sscanf %s copiando una cadena de longitud desconocida en un búfer fijo
- C12: rand(), random(), drand48() o std::mt19937 usados para generar tokens, ids de sesión, claves, salts, nonces o IV
- C13: mktemp, tmpnam y tempnam
- C14: archivos de compilación que desactivan el endurecimiento: -fno-stack-protector, -z execstack, -z norelro, -D_FORTIFY_SOURCE=0, -no-pie, -Wno-format-security, /GS- y /DYNAMICBASE:NO de MSVC y los ajustes equivalentes de Visual Studio
- C15: contraseñas hasheadas con MD5, SHA-1 o SHA-2 en lugar de un hash de contraseñas
- C16: comprobaciones TLS incompletas: clientes OpenSSL que nunca activan SSL_VERIFY_PEER o nunca comprueban el nombre de host, clientes Boost.Asio sin verify_peer ni verificación del nombre de host, ignoreSslErrors() de Qt sin lista, y desactivaciones detrás de una opción
- C17: memset, bzero o ZeroMemory limpiando un búfer de contraseña o de clave criptográfica, algo que el compilador puede eliminar
- C18: dependencias de CMake FetchContent, ExternalProject y CPM en una rama o sin tag, descargas por URL sin URL_HASH y file(DOWNLOAD) sin EXPECTED_HASH
- C19: literales que solo un nombre de contraseña, token o clave marca como secretos, comparaciones de contraseñas con un valor fijo y credenciales en una cabecera de secretos ignorada por git, como arduino_secrets.h
- C20: system(), popen() o sh -c con un comando procedente de un parámetro, un miembro o el resultado de una función que el escáner no puede seguir
Qué incluye
- El escáner (Python 3.9+, solo biblioteca estándar)
- Una guía de reglas con el motivo, la alternativa más segura y un enlace a la documentación (SEI CERT C, OpenSSF, libcurl, OpenSSL, OWASP, CMake) para cada regla
- Un proyecto de ejemplo arriesgado y otro seguro, y el informe real que el escáner genera sobre el arriesgado
Limitaciones
Lee cada archivo como texto, sin ejecutar el preprocesador: las macros no se expanden, se leen todas las ramas #if excepto #if 0, y no se conocen los tamaños de búfer ni los valores construidos en otras funciones o archivos; los comandos solo se siguen a través de variables locales y de nivel de archivo. No se ven los flags del compilador definidos fuera de los archivos escaneados (scripts de CI, presets de CMake, variables de entorno). Los archivos de Objective-C y CUDA no se leen. El propio ejemplo https.c de curl se reporta para revisión, porque su opción de compilación SKIP_PEER_VERIFICATION puede desactivar las comprobaciones. NOT FLAGGED no es una garantía; mantén también en tu compilación las advertencias del compilador, los sanitizers y un analizador estático completo.
Contenido
Un archivo ZIP con 27 archivos: SKILL.md, el escáner en scripts/ (9 archivos de Python), references/rules.md (cada regla con su motivo y la alternativa más segura) y examples/ (15 archivos de ejemplo más report.md, la salida real del escáner sobre el ejemplo arriesgado).
Cómo usarlo: Esta es una skill para agentes: una carpeta con un archivo SKILL.md y scripts de Python que un agente de programación con IA como Claude Code, Cursor o Codex CLI puede ejecutar. Descomprímela en la carpeta de skills de tu agente (para Claude Code: ~/.claude/skills/) y luego pide a tu agente que revise tu proyecto. Los scripts también funcionan por sí solos con Python 3.9 o posterior, sin instalar nada. Solo leen tus archivos: sin acceso a la red, y no se envía nada a ningún sitio.
Qué recibes
1 archivo · 64.22 KB
- c-cpp-code-safety-check-1.0.0.zipZIP · 64.22 KB
Herramientas y scripts de IA
Revisión de seguridad de código C y C++
Revisa código C y C++, sketches de Arduino y compilaciones de CMake en busca de gets(), comandos de shell construidos a partir de la entrada, printf(msg), scanf %s, comprobaciones TLS desactivadas, contraseñas y claves en el código, tokens aleatorios débiles y flags de endurecimiento eliminados.
Getly abrió los archivos subidos y no encontró nada que impida abrirlos. No es un análisis antivirus ni una valoración de calidad.
Etiquetas
Preguntas frecuentes
¿Tengo acceso al instante?
Sí. Es un producto digital: puedes descargarlo justo después del pago, directamente desde tu biblioteca.
¿Puedo usarlo en proyectos comerciales?
Sí. Se permite el uso comercial: úsalo en tu propio negocio y en cosas que vendas. No puedes revender ni redistribuir el archivo en sí.
¿Cuál es vuestra política de reembolso?
Puedes pedir un reembolso dentro de 30 días. Si algo no va bien, solicítalo desde tu pedido y el equipo de Getly lo revisa.
¿Qué formatos y tamaños de archivo recibiré?
Descargarás 1 archivo - ZIP - 64.22 KB en total.
¿Recibo actualizaciones gratis?
Sí: cuando el vendedor publica una versión nueva, puedes volver a descargar los archivos más recientes desde tu biblioteca sin coste extra. Mira el registro de cambios para ver las últimas actualizaciones.
Precio
$5.00



