Перейти к основному содержимому

Меню команд

Перейти на страницу или искать в каталоге

ИИ-инструменты и скрипты

Проверка безопасности кода на C и C++

Проверка кода на C и C++, скетчей Arduino и сборок CMake на gets(), shell-команды, собранные из входных данных, printf(msg), scanf %s, отключённые проверки TLS, пароли и ключи в коде, слабые случайные токены и удалённые флаги защиты.

$5.00

Что вы получите: 1 файл · 64.22 KB · ZIP

Варианты покупки

Описание товара

Программа обновления прошивки, которая устанавливает CURLOPT_SSL_VERIFYPEER в 0, "потому что часы устройства идут неверно", установит всё, что ей пришлёт враждебная сеть Wi-Fi. Вспомогательная функция ping, которая собирает "ping -c 1 %s" через snprintf и передаёт строку в system(), выполнит любую команду, введённую после точки с запятой, а вызов журналирования в виде printf(msg) позволяет %n в этом сообщении записывать в память. Этот навык находит такие ошибки и другие ошибки C и C++ из списка ниже до выпуска кода и объясняет, как исправить каждую из них.

Ваш агент запускает сканер для ваших файлов .c, .h, .cpp, .cc, .hpp и Arduino .ino, а также для CMakeLists.txt, *.cmake, Makefile, meson.build и файлов Visual Studio .vcxproj. Он понимает комментарии, строковые и символьные литералы (включая raw-строки и разделители разрядов), пропускает блоки #if 0 и папки со сторонним кодом или пакетами менеджеров пакетов, такие как third_party, .pio и managed_components, отличает вызовы от объявлений и вызовов методов и прослеживает команду через локальные переменные, поэтому char cmd[] = "clear"; system(cmd); не попадает в отчёт, а имя хоста, подставленное в "ping -c 1 %s", попадает. Для TLS он определяет, является ли код клиентом или сервером, поэтому SSL_VERIFY_NONE на сервере, который не запрашивает клиентские сертификаты, не попадает в отчёт, а отключение проверки за небезопасной или отладочной настройкой считается пунктом для проверки, а не блокирующей ошибкой. Учётные данные блокируют выпуск, только если их назначение не вызывает сомнений (пароль, переданный в WiFi.begin или CURLOPT_USERPWD, строка подключения, закрытый ключ, известный формат ключа, ключ, похожий на сгенерированный); литерал, который считается секретом только по своему имени, становится пунктом для проверки. Сканер никогда не компилирует и не запускает ваш код. Он возвращает BLOCK, REVIEW или NOT FLAGGED с указанием файла, строки, причины и более безопасного подхода. Секреты никогда не выводятся.

Что проверяется

BLOCK (исправить до выпуска)

  • C01: вызовы gets() (а также std::gets и _getws)
  • C02: system(), popen(), их варианты для Windows и execl("/bin/sh", "sh", "-c", cmd) с командой, собранной во время выполнения: значение, подставленное или присоединённое к фиксированной команде, либо команда из argv, getenv или прочитанных данных
  • C03: вызовы функций семейства printf (printf, fprintf, snprintf, syslog, dprintf и другие), у которых строка формата не является литералом и нет других аргументов
  • C04: scanf и fscanf, читающие %s или %[ без указания ширины поля
  • C05: отключённые проверки TLS в клиентском коде: VERIFYPEER или VERIFYHOST в libcurl, установленные в 0, SSL_VERIFY_NONE, ssl::verify_none, QSslSocket::VerifyNone или MBEDTLS_SSL_VERIFY_NONE в клиенте, функции обратного вызова проверки, которые всегда принимают сертификат, переключатели cpp-httplib и cpr, setInsecure() для ESP32 и skip_cert_common_name_check в ESP-IDF, флаги игнорирования WinHTTP и SChannel, TLS_VERIFY OFF в CMake
  • C06: учётные данные, назначение которых не вызывает сомнений: пароли, переданные в WiFi.begin, mysql_real_connect, CURLOPT_USERPWD или wifi_config в ESP-IDF, строки подключения, пароли в части URL с данными пользователя, заголовки Authorization, закрытые ключи PEM, известные форматы ключей и похожие на сгенерированные ключи под секретным именем

REVIEW (проверить перед релизом)

  • C11: strcpy, strcat, sprintf с %s, vsprintf и sscanf %s, копирующие строку неизвестной длины в буфер фиксированного размера
  • C12: rand(), random(), drand48() или std::mt19937, используемые для создания токенов, идентификаторов сессий, ключей, солей, nonce или IV
  • C13: mktemp, tmpnam и tempnam
  • C14: файлы сборки, отключающие защитные механизмы: -fno-stack-protector, -z execstack, -z norelro, -D_FORTIFY_SOURCE=0, -no-pie, -Wno-format-security, MSVC /GS-, /DYNAMICBASE:NO и соответствующие настройки Visual Studio
  • C15: пароли, хешированные с помощью MD5, SHA-1 или SHA-2 вместо специальной функции хеширования паролей
  • C16: неполные проверки TLS: клиенты OpenSSL, которые не включают SSL_VERIFY_PEER или не проверяют имя хоста, клиенты Boost.Asio без verify_peer или проверки имени хоста, ignoreSslErrors() в Qt без списка ошибок, а также отключение проверок за настройкой
  • C17: memset, bzero или ZeroMemory, очищающие буфер с паролем или криптографическим ключом, что компилятор может удалить
  • C18: зависимости CMake FetchContent, ExternalProject и CPM, привязанные к ветке или без тега, загрузки по URL без URL_HASH и file(DOWNLOAD) без EXPECTED_HASH
  • C19: литералы, которые считаются секретом только по имени пароля, токена или ключа, сравнения пароля с фиксированным значением и учётные данные в игнорируемом git заголовочном файле с секретами, например arduino_secrets.h
  • C20: system(), popen() или sh -c с командой из параметра, поля класса или результата функции, которые сканер не может отследить

Что входит в комплект

  • Сканер (Python 3.9+, только стандартная библиотека)
  • Руководство по правилам с причиной, более безопасным подходом и ссылкой на документацию (SEI CERT C, OpenSSF, libcurl, OpenSSL, OWASP, CMake) для каждого правила
  • Рискованный и безопасный примеры проектов, а также реальный отчёт сканера по рискованному примеру

Ограничения

Сканер читает каждый файл как текст, без запуска препроцессора: макросы не раскрываются, читаются все ветки #if, кроме #if 0, а размеры буферов и значения, созданные в других функциях или файлах, неизвестны; команды отслеживаются только через локальные переменные и переменные уровня файла. Флаги компилятора, заданные вне проверяемых файлов (скрипты CI, пресеты CMake, переменные окружения), не учитываются. Файлы Objective-C и CUDA не читаются. Собственный пример https.c из curl попадает в отчёт для проверки, поскольку его переключатель сборки SKIP_PEER_VERIFICATION может отключить проверки. NOT FLAGGED не является гарантией; продолжайте использовать в сборке предупреждения компилятора, санитайзеры и полноценный статический анализатор.

Содержимое

Один ZIP-файл с 27 файлами: SKILL.md, сканер в scripts/ (9 файлов Python), references/rules.md (каждое правило с причиной и более безопасным подходом) и examples/ (15 файлов примеров плюс report.md, реальный вывод сканера для рискованного примера).

Как использовать: Это навык для агента: папка с файлом SKILL.md и скриптами на Python, которые может запускать ИИ-агент для программирования, например Claude Code, Cursor или Codex CLI. Распакуйте архив в папку навыков вашего агента (для Claude Code: ~/.claude/skills/), затем попросите агента проверить ваш проект. Скрипты работают и самостоятельно на Python 3.9 или новее, ничего устанавливать не нужно. Они только читают ваши файлы: никакого доступа к сети, ничего никуда не отправляется.

Что вы получите

1 файл · 64.22 KB

  • c-cpp-code-safety-check-1.0.0.zipZIP · 64.22 KB
ЛицензияКоммерческое использование разрешено
Проверка пакетаПройдена

Getly открыл загруженные файлы и не нашёл ничего, что помешало бы их открыть. Это не проверка на вирусы и не оценка качества.

Опубликовано12 нояб. 2026 г.
Размер файла64.22 KB
Формат файлаZIP
Версияv1.0

Теги

ccppsecurityembeddedcmakeai agent skill
R
RR HH

Частые вопросы

Доступ открывается сразу?

Да. Это цифровой товар - скачать его можно сразу после оплаты, прямо из своей библиотеки.

Можно ли использовать в коммерческих проектах?

Да. Коммерческое использование разрешено: в своём бизнесе и в том, что вы продаёте. Перепродавать и распространять сам файл нельзя.

Какие условия возврата?

Запросить возврат можно в течение 30 дней. Если что-то не так, оформите заявку в своём заказе - её рассмотрит команда Getly.

Какие форматы и размеры файлов я получу?

Вы скачаете 1 файл - ZIP - всего 64.22 KB.

Обновления бесплатны?

Да - когда продавец выпускает новую версию, вы можете бесплатно скачать актуальные файлы из своей библиотеки. Последние изменения смотрите в истории версий.

Цена

$5.00