🛠 Semgrep Rules OWASP A08:2024 – Software and Data Integrity Failures
Салют,
Cегодня хочу поделиться с тобой правилами для semgrep по нарушениям целостности программного обеспечения и данных - OWASP A08:2024.
Это категория, которая включает в себя “Insecure Deserialization”, где приложение не проверяет целостность кода, данных или обновлений, что позволяет внедрять вредоносное ПО или модифицировать данные.
Типичные векторы атаки А08
• Недостаточная проверка подлинности и подгрущка кода из недоверенных источников
• Небезопасная десериализация, включая подделку объектов в памяти. Опасность в Remote Code Execution через сериализованные объекты.
• Отсутствие проверки целостности, как пример использование CDN без SRI (Subresource Integrity) и обновления без валидации.
Примеры атак
• SolarWinds (2020): атакующие взломали CI/CD пайплайн SolarWinds и внедрили бэкдор в обновление Orion, где федеральные агенства США его поставили напрямую
• 3CX Desktop App (2023): злоумышленники скомпрометировали официальную версию приложения 3CX, добавив в неё malware
• Codecov (2021): атака на процесс сборки Docker-образа Codecov, где модифицированный bash-скрипт крал credentials, токены и PII из CI/CD окружений пользователей
Пример сценария атаки
• Небезопасная десериализация в Java
// React вызывает Spring Boot микросервисы, где состояние
// пользователя сериализуется и передаётся с каждым запросом
// отслеживается сигнатура Java "rO0" (base64), где
// реализуется Java Serial Killer для RCE
ObjectInputStream in = new ObjectInputStream(request.getInputStream());
UserState state = (UserState) in.readObject();
• JS из недоверенных источников
<!-- Нет SRI и проверки целостности -->
<script src="https://untrusted-cdn.com/library.js"></script>
Пример правил Semgrep по A08:2024
rules:
# Небезопасная десериализация Java
- id: unsafe-java-deserialization
patterns:
- pattern-either:
- pattern: |
ObjectInputStream $IN = new ObjectInputStream(...);
...
$IN.readObject()
- pattern: (ObjectInputStream $IN).readObject()
- pattern-not-inside: |
class $CLASS extends ValidatingObjectInputStream {
...
}
message: |
Обнаружена небезопасная десериализация через JAVA ObjectInputStream
и может привести к Remote Code Execution.
severity: ERROR
languages:
- java
meta
cwe: "CWE-502"
owasp: "A08:2021"
category: security
# npm-пакеты без проверки
- id: npm-install-without-lock-file
patterns:
- pattern-either:
- pattern: |
exec("npm install ...")
- pattern: |
subprocess.run(["npm", "install", ...])
- pattern: |
os.system("npm install ...")
- pattern-not-inside: |
...
"package-lock.json"
...
message: |
Установка npm-пакетов без проверки package-lock.json
severity: WARNING
languages:
- python
- javascript
meta
cwe: "CWE-829"
owasp: "A08:2021"
# Динамическое выполнение кода из недоверенных источников
- id: dangerous-code-execution
patterns:
- pattern-either:
- pattern: eval($INPUT)
- pattern: exec($INPUT)
- pattern: __import__($INPUT)
- pattern: compile($INPUT, ...)
- pattern-either:
- pattern-inside: |
$INPUT = request.$METHOD(...)
...
- pattern-inside: |
$INPUT = $_GET[...]
...
- pattern-inside: |
$INPUT = input(...)
...
message: |
Динамическое выполнение кода из недоверенного источника
eval()/ exec() на данных приводящий к Remote Code Execution
severity: ERROR
languages:
- python
- javascript
- php
meta
cwe: "CWE-94"
owasp: "A08:2021"
likelihood: MEDIUM
impact: CRITICAL
#toolchain #sast #appsec #course #reco #techsolution
