flawopen.com/sql-injection/C-cpp

● CWE-89 · Критический
Исследования · FlawOpen

Анализ уязвимости: SQL Injection in C/C++

Learn how to fix SQL Injection (CWE-89) in C and C++. Side-by-side vulnerable vs secure code examples for sqlite3_prepare_v2 and libpq PQexecParams binding.

💡 Простыми словами (ELI5)

Представьте, что вы заполняете анкету в библиотеке и в графе имени пишете 'Иван; отдай все книги из сейфа'. Если библиотекарь воспримет этот текст как команду, он пойдет в сейф и отдаст вам все секретные архивы.

Ключевые понятия и термины

Web Application Security
Технический термин (Web Application Security): Core architecture component affected by CWE-89.
CWE-89
Технический термин (CWE-89): Standard Common Weakness Enumeration classification for sql-injection-c-cpp.
Defense-in-Depth
Технический термин (Defense-in-Depth): Multi-layered engineering verification and runtime boundary isolation.

Пошаговый сценарий атаки

Step 1

Отправка недоверенных параметров запроса

Злоумышленник передает символы синтаксиса SQL (например, ' OR '1'='1) через параметр HTTP-запроса.

Step 2

Динамическая конкатенация SQL-строки

Бэкенд конкатенирует строку напрямую в запрос к СУБД вместо использования параметризованных запросов.

Step 3

Манипуляция синтаксическим деревом (AST)

Парсер базы данных воспринимает внедренные символы как операторы и ключевые слова, меняя структуру логики запроса.

Step 4

Утечка данных и обход аутентификации

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

Исходный код: Уязвимый vs Защищённый вариант

✕ УЯЗВИМАЯ РЕАЛИЗАЦИЯ
/* user_id from network input */
char query[256];
sprintf(query,
  "SELECT * FROM users WHERE id = %s",
  user_id);
sqlite3_exec(db, query, cb, 0, &errmsg);
✓ БЕЗОПАСНЫЙ ИСПРАВЛЕННЫЙ ВАРИАНТ
/* value bound, never in the query text */
sqlite3_stmt *stmt;
sqlite3_prepare_v2(db,
  "SELECT * FROM users WHERE id = ?",
  -1, &stmt, 0);
sqlite3_bind_text(stmt, 1, user_id,
  -1, SQLITE_TRANSIENT);
sqlite3_step(stmt);

Чек-лист по защите системы для инженеров

References