Перейти до основного вмісту

Меню команд

Перейдіть на сторінку або пошукайте в каталозі

ШІ-інструменти та скрипти

Перевірка безпеки коду 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. Він розуміє коментарі, рядкові та символьні літерали (зокрема сирі рядки та роздільники цифр), пропускає блоки #if 0 і теки сторонніх залежностей або менеджерів пакетів, як-от third_party, .pio і managed_components, відрізняє виклики від оголошень і викликів членів класу та простежує команду через локальні змінні, тож char cmd[] = "clear"; system(cmd); не позначається, а ім'я хоста, підставлене в "ping -c 1 %s", позначається. Для TLS він визначає, чи код є клієнтом, чи сервером, тому SSL_VERIFY_NONE на сервері, який не запитує клієнтські сертифікати, не позначається, а вимкнення за параметром insecure або debug вважається пунктом для перевірки, а не блокером. Облікові дані є блокером лише тоді, коли їхнє призначення не викликає сумнівів (пароль, переданий у 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, рядки підключення, паролі в частині user-info 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) для агента: тека з файлом 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