Skip to content

Commit 73145f4

Browse files
author
eugener
committed
top8-10 translated
1 parent 966c045 commit 73145f4

File tree

3 files changed

+105
-28
lines changed

3 files changed

+105
-28
lines changed

2019/ru/src/0xa8-injection.md

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
API8:2019 Injection
1+
API8:2019 Инъекции
22
===================
33

4-
| Threat agents/Attack vectors | Security Weakness | Impacts |
4+
| Источники угроз/Векторы атак | Недостатки безопасности | Последствия |
55
| - | - | - |
6-
| API Specific : Exploitability **3** | Prevalence **2** : Detectability **3** | Technical **3** : Business Specific |
6+
| Зависит от API : Сложность эксплуатации **3** | Распространненность **2** : Сложность обнаружения **3** | Технические последствия **3** : Зависит от бизнеса |
77
| Attackers will feed the API with malicious data through whatever injection vectors are available (e.g., direct input, parameters, integrated services, etc.), expecting it to be sent to an interpreter. | Injection flaws are very common and are often found in SQL, LDAP, or NoSQL queries, OS commands, XML parsers, and ORM. These flaws are easy to discover when reviewing the source code. Attackers can use scanners and fuzzers. | Injection can lead to information disclosure and data loss. It may also lead to DoS, or complete host takeover. |
88

9-
## Is the API Vulnerable?
9+
| Злоумышленник может отправить в API любые данные через любой доступный вектор инъекции (например, прямой ввод, параметры, интегрированные сервисы и так далее), предполагая, что они будут перенаправлены в интерпретатор. | Ошибки приводящие к инъекциям очерь распространены и пресущи SQL, LDAP и NoSQL запросам, командам в операционной системе, XML парсерам и ORM. Подобные ошибки легко обнаруживаются в ходе анализа исходного кода. Злоумышленники могут использовать сканеры и фаззеры. | Инъекции могут привести к разглашению или уничтожению данных, отказу в обслуживании или получению злоумышленником полного контроля на сервером. |
10+
11+
## Как определить является ли API уязвимым?
1012

1113
The API is vulnerable to injection flaws if:
1214

@@ -17,15 +19,23 @@ The API is vulnerable to injection flaws if:
1719
* Data coming from external systems (e.g., integrated systems) is not validated,
1820
filtered, or sanitized by the API.
1921

20-
## Example Attack Scenarios
22+
API уязвимо к инхекциям если:
23+
24+
* Дданные, поступившие от пользователя, не валидируются, фильтруютсч или очищаются на стороне API.
25+
* Данные, поступившие от пользователя, конкатенируются или используются в неизменном виде в SQL/NoSQL/LDAP запросах, командах на операционной системе, XML парсерах, ORM (Object Relational Mapping) или ODM (Object Document Mapper).
26+
* Данные поступающие из внешних систем (например, инегрированных систем) ге валидируются, фильтруются или очищаются на стороне API.
27+
28+
## Примеры сценариев атаки
2129

22-
### Scenario #1
30+
## Сценарий #1
2331

2432
Firmware of a parental control device provides the endpoint
2533
`/api/CONFIG/restore` which expects an appId to be sent as a multipart
2634
parameter. Using a decompiler, an attacker finds out that the appId is passed
2735
directly into a system call without any sanitization:
2836

37+
Прошивка устройства контроля за детьми предоставляет точку входа `/api/CONFIG/restore`, которая ожидает запроса с multipart параметром appId. Используя декомпилятор, злоумышленник обнаруживает, что appId передается непосредственно в вызов команды на операционной системе без предварительной очистки:
38+
2939
```c
3040
snprintf(cmd, 128, "%srestore_backup.sh /tmp/postfile.bin %s %d",
3141
"/mnt/shares/usr/bin/scripts/", appid, 66);
@@ -35,11 +45,13 @@ system(cmd);
3545
The following command allows the attacker to shut down any device with the same
3646
vulnerable firmware:
3747
48+
Следующая команда позволяет злоумышленнику отключить любое устройство с уязвимой прошивкой:
49+
3850
```
3951
$ curl -k "https://${deviceIP}:4567/api/CONFIG/restore" -F 'appid=$(/etc/pod/power_down.sh)'
4052
```
4153
42-
### Scenario #2
54+
### Сценарий #2
4355
4456
We have an application with basic CRUD functionality for operations with
4557
bookings. An attacker managed to identify that NoSQL injection might be possible
@@ -48,6 +60,11 @@ is how the request looks like: `DELETE /api/bookings?bookingId=678`.
4860
4961
The API server uses the following function to handle delete requests:
5062
63+
Рассмотрим приложение с базовым CRUD функционалом для операций с бронированиями. Злоумышленник обнаружил NoSQL инъекцию через параметр `bookingId` в запросе на удаление бронирования. Запрос выглядит следующим образом: `DELETE /api/bookings?bookingId=678`.
64+
65+
Сервер API обрабатывает запросы на удаление с помощью следующей функции:
66+
67+
5168
```javascript
5269
router.delete('/bookings', async function (req, res, next) {
5370
try {
@@ -63,11 +80,13 @@ The attacker intercepted the request and changed `bookingId` query string
6380
parameter as shown below. In this case, the attacker managed to delete another
6481
user's booking:
6582

83+
Злоумышленник перехватывает запрос и изменяет параметр `bookingId`, как продемонстрировано ниже. В этом случае злоумышленник смог удалить бронирование, принадлежащее другому пользователю:
84+
6685
```
6786
DELETE /api/bookings?bookingId[$ne]=678
6887
```
6988

70-
## How To Prevent
89+
## Как предотвратить
7190

7291
Preventing injection requires keeping data separate from commands and queries.
7392

@@ -84,7 +103,17 @@ Preventing injection requires keeping data separate from commands and queries.
84103
each input parameter.
85104
* Define data types and strict patterns for all string parameters.
86105

87-
## References
106+
Для предотвращения инъекций необходимо отделять данные от команд и запросов.
107+
108+
* Валидируйте данные, использую одну доверенную и активно поддерживаемую библиотеку.
109+
* Валидируйте, фильтруйте и очищайте все данные получаемые от клиентов или интегрированных систем.
110+
* Специальные символы должны быть обезврежены (escaped), используя синтаксис целевого интерпретатора.
111+
* Отдайте предпочтение безопасному API, предоставляющему параметризированный интерфейс.
112+
* Всегда ограничивайте количество возвращаемых записей, чтобы предотратить массовую утечку данных в случае инъекции.
113+
* Валидируйте входящие данные с помощью надлежащих фильтров, допуская только подходящие значения каждого из входящих параметров.
114+
* Определите тип данных и строгую модель данных для всех строковых параметров.
115+
116+
## Ссылки
88117

89118
### OWASP
90119

@@ -93,7 +122,7 @@ Preventing injection requires keeping data separate from commands and queries.
93122
* [NoSQL Injection Fun with Objects and Arrays][3]
94123
* [Command Injection][4]
95124

96-
### External
125+
### Внешние
97126

98127
* [CWE-77: Command Injection][5]
99128
* [CWE-89: SQL Injection][6]

2019/ru/src/0xa9-improper-assets-management.md

Lines changed: 39 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
API9:2019 Improper Assets Management
22
====================================
33

4-
| Threat agents/Attack vectors | Security Weakness | Impacts |
4+
| Источники угроз/Векторы атак | Недостатки безопасности | Последствия |
55
| - | - | - |
6-
| API Specific : Exploitability **3** | Prevalence **3** : Detectability **2** | Technical **2** : Business Specific |
6+
| Зависит от API : Сложность эксплуатации **3** | Распространненность **3** : Сложность обнаружения **2** | Технические последствия **2** : Зависит от бизнеса |
77
| Old API versions are usually unpatched and are an easy way to compromise systems without having to fight state-of-the-art security mechanisms, which might be in place to protect the most recent API versions. | Outdated documentation makes it more difficult to find and/or fix vulnerabilities. Lack of assets inventory and retire strategies leads to running unpatched systems, resulting in leakage of sensitive data. It’s common to find unnecessarily exposed API hosts because of modern concepts like microservices, which make applications easy to deploy and independent (e.g., cloud computing, k8s). | Attackers may gain access to sensitive data, or even takeover the server through old, unpatched API versions connected to the same database. |
88

9-
## Is the API Vulnerable?
9+
Старые версии API обычно не содержат всех исправлений и могут быть с легкостью скомпрометированы без необходимости обходить новейшие механизмы безопасности, которые с высокой вероятностью используются для защиты последних версий API. | Устаревшая документация усложняет поиск и исправление уязвимостей. Отсутствие инвентаризации активов и стратегии вывода из эксплуатации приводит к функционированию необновленных систем, которые могут быть использованы для кражи критичных данных. Точки входа API зачастую доступны без необходимости на то из-за использования современных подходов типа микро-сервисов, которые позволяют легко разворачить независимые приложения (например, облачные вычисления или kubernetes). | Злоумышленник может получить доступ к критичным данным или даже получить контроль над сервером через старую, необновленную версию API, использующую одну и ту же базу данных. |
10+
11+
## Как определить является ли API уязвимым?
1012

1113
The API might be vulnerable if:
1214

@@ -25,9 +27,23 @@ The API might be vulnerable if:
2527
outdated.
2628
* Old or previous API versions are running unpatched.
2729

28-
## Example Attack Scenarios
30+
API может быть уязвимым если:
31+
32+
* Назначение API ??? (хост АПИ? коряво) неясно, а также нет четких ответов на следующие вопросы:
33+
* В каком окружении запущено API (например, промышленное, промежуточное (staging), тестовое, разработческое)?
34+
* Каким должен быть сетевой доступ к API (например, общедоступным, внутренним, для партнеров)?
35+
* Какая версия API запущена?
36+
* Какие данные собираются и обрабатываются API (например, персональные данные)?
37+
* Каков потом движения данных?
38+
* Документация отсутствует или не обновляется.
39+
* Отсутствует план вывода из эксплуатации предыдущих версий API.
40+
* Инвентаризация хостов ??? не проводится, или ее результаты устарели.
41+
* Инвентаризация интегрированных внутренних или сторонних сервисов не проводится, или ее результаты устарели.
42+
* Старые или предыдущие версии API функционируют без обновлений.
43+
44+
## Примеры сценариев атаки
2945

30-
### Scenario #1
46+
## Сценарий #1
3147

3248
After redesigning their applications, a local search service left an old API
3349
version (`api.someservice.com/v1`) running, unprotected, and with access to the
@@ -36,7 +52,9 @@ attacker found the API address (`api.someservice.com/v2`). Replacing `v2` with
3652
`v1` in the URL gave the attacker access to the old, unprotected API,
3753
exposing the personal identifiable information (PII) of over 100 Million users.
3854

39-
### Scenario #2
55+
После переработки своих приложений локальный поисковый сервис оставил доступ к старой версию API (`api.someservice.com/v1`) без надлежащих мер защиты и с доступом к базе данных пользователей. Тестируя одну из последних выпущенных версий приложения, злоумышленник нашел адрес API (`api.someservice.com/v2`). Заменив `v2` на `v1` в URL, злоумышленник получил доступ к старому незащищенному API, предоставляющему доступ к персональным данным более 100 миллионов пользователей.
56+
57+
### Сценарий #2
4058

4159
A social network implemented a rate-limiting mechanism that blocks attackers
4260
from using brute-force to guess reset password tokens. This mechanism wasn’t
@@ -47,7 +65,10 @@ runs the same API, including the reset password mechanism, but the rate limiting
4765
mechanism was not in place. The researcher was able to reset the password of any
4866
user by using a simple brute-force to guess the 6 digits token.
4967

50-
## How To Prevent
68+
Социальная сеть внедрила механизм ограничения количества запросов, не позволяющий злоумышленнику подобрать токен для сброса пароля. Этот механизм не был внедрен непосредственно в код API, а использовался в качестве отдельного компонента между клиентов и официальным API (`www.socialnetwork.com`).
69+
Исследователь нашел бета версию API (`www.mbasic.beta.socialnetwork.com`), использующую тот же API, включая механизм сброса пароля, но не механизм ограничения количества запросов. Исследователь смог сбросить пароль любого пользователя, перебирая все возможные варианты кода из 6 цифр.
70+
71+
## Как предотвратить
5172

5273
* Inventory all API hosts and document important aspects of each one of them,
5374
focusing on the API environment (e.g., production, staging, test,
@@ -65,9 +86,18 @@ user by using a simple brute-force to guess the 6 digits token.
6586
* Avoid using production data with non-production API deployments. If this is unavoidable, these endpoints should get the same security treatment as the production ones.
6687
* When newer versions of APIs include security improvements, perform risk analysis to make the decision of the mitigation actions required for the older version: for example, whether it is possible to backport the improvements without breaking API compatibility or you need to take the older version out quickly and force all clients to move to the latest version.
6788

68-
## References
89+
* Проводите инвентаризацию хостов ??? API и документируйте важные аспекты каждого из них: окружение (например, промышленное, промежуточное (staging), тестовое, разработческое), каким должен быть сетевой доступ (например, общедоступным, внутренним, для партнеров) и версию API.
90+
* Проводите инвентаризацию интегрированных сервисов и документируйте важные аспекты каждого из них: роль в системе, какие данные участвую в обмене (потоки данных), какая степень критичности тих данных.
91+
* Документируйте все аспекты API: аутентификацию, ошибки, перенаправления, ограничение количества запросов, политику разделения ресурсов между источниками (CORS) и точки входа, включая параметры, запросы и ответы.
92+
* Создавайте документацию автоматически, используя общедоступные стандарты. Включайте создание документации в CI/CD.
93+
* Предоставьте документацию тем, кто имеет право доступа к API.
94+
* Используйте внешние меры защиты, например, API security firewalls на всех доступных версиях API, а не только на текущей версии в промышленной эксплуатации.
95+
* Избегайте использования данных с промышленной системы в API на базе непромышленного окружения. Если такого использования невозможно избежать, защищайте это API аналогично используемым в промышленной эксплуатации.
96+
* Когда новая версия API включает улучшения, связанные с безопасностью, проводите анализ рисков для принятия решения о действиях по снижению рисков в старых версиях, например, переносу улучшения в старые версии без не нарушения совместимости, или отключению старой версии и переводу всех клиентов на последнюю версию.
97+
98+
## Ссылки
6999

70-
### External
100+
### Внешние
71101

72102
* [CWE-1059: Incomplete Documentation][1]
73103
* [OpenAPI Initiative][2]

0 commit comments

Comments
 (0)