You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|API Specific : Exploitability **3**|Prevalence**2** : Detectability **3**|Technical **3** : Business Specific|
6
+
|Зависит от API : Сложность эксплуатации **3**|Распространненность**2** : Сложность обнаружения **3**|Технические последствия **3** : Зависит от бизнеса|
7
7
| 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. |
8
8
9
-
## Is the API Vulnerable?
9
+
| Злоумышленник может отправить в API любые данные через любой доступный вектор инъекции (например, прямой ввод, параметры, интегрированные сервисы и так далее), предполагая, что они будут перенаправлены в интерпретатор. | Ошибки приводящие к инъекциям очерь распространены и пресущи SQL, LDAP и NoSQL запросам, командам в операционной системе, XML парсерам и ORM. Подобные ошибки легко обнаруживаются в ходе анализа исходного кода. Злоумышленники могут использовать сканеры и фаззеры. | Инъекции могут привести к разглашению или уничтожению данных, отказу в обслуживании или получению злоумышленником полного контроля на сервером. |
10
+
11
+
## Как определить является ли API уязвимым?
10
12
11
13
The API is vulnerable to injection flaws if:
12
14
@@ -17,15 +19,23 @@ The API is vulnerable to injection flaws if:
17
19
* Data coming from external systems (e.g., integrated systems) is not validated,
18
20
filtered, or sanitized by the API.
19
21
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
+
## Примеры сценариев атаки
21
29
22
-
### Scenario#1
30
+
##Сценарий#1
23
31
24
32
Firmware of a parental control device provides the endpoint
25
33
`/api/CONFIG/restore` which expects an appId to be sent as a multipart
26
34
parameter. Using a decompiler, an attacker finds out that the appId is passed
27
35
directly into a system call without any sanitization:
28
36
37
+
Прошивка устройства контроля за детьми предоставляет точку входа `/api/CONFIG/restore`, которая ожидает запроса с multipart параметром appId. Используя декомпилятор, злоумышленник обнаруживает, что appId передается непосредственно в вызов команды на операционной системе без предварительной очистки:
We have an application with basic CRUD functionality for operations with
45
57
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`.
48
60
49
61
The API server uses the following function to handle delete requests:
50
62
63
+
Рассмотрим приложение с базовым CRUD функционалом для операций с бронированиями. Злоумышленник обнаружил NoSQL инъекцию через параметр `bookingId` в запросе на удаление бронирования. Запрос выглядит следующим образом: `DELETE /api/bookings?bookingId=678`.
64
+
65
+
Сервер API обрабатывает запросы на удаление с помощью следующей функции:
66
+
67
+
51
68
```javascript
52
69
router.delete('/bookings', async function (req, res, next) {
53
70
try {
@@ -63,11 +80,13 @@ The attacker intercepted the request and changed `bookingId` query string
63
80
parameter as shown below. In this case, the attacker managed to delete another
64
81
user's booking:
65
82
83
+
Злоумышленник перехватывает запрос и изменяет параметр `bookingId`, как продемонстрировано ниже. В этом случае злоумышленник смог удалить бронирование, принадлежащее другому пользователю:
84
+
66
85
```
67
86
DELETE /api/bookings?bookingId[$ne]=678
68
87
```
69
88
70
-
## How To Prevent
89
+
## Как предотвратить
71
90
72
91
Preventing injection requires keeping data separate from commands and queries.
73
92
@@ -84,7 +103,17 @@ Preventing injection requires keeping data separate from commands and queries.
84
103
each input parameter.
85
104
* Define data types and strict patterns for all string parameters.
86
105
87
-
## References
106
+
Для предотвращения инъекций необходимо отделять данные от команд и запросов.
107
+
108
+
* Валидируйте данные, использую одну доверенную и активно поддерживаемую библиотеку.
109
+
* Валидируйте, фильтруйте и очищайте все данные получаемые от клиентов или интегрированных систем.
110
+
* Специальные символы должны быть обезврежены (escaped), используя синтаксис целевого интерпретатора.
|API Specific : Exploitability **3**|Prevalence**3** : Detectability **2**|Technical **2** : Business Specific|
6
+
|Зависит от API : Сложность эксплуатации **3**|Распространненность**3** : Сложность обнаружения **2**|Технические последствия **2** : Зависит от бизнеса|
7
7
| 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. |
8
8
9
-
## Is the API Vulnerable?
9
+
Старые версии API обычно не содержат всех исправлений и могут быть с легкостью скомпрометированы без необходимости обходить новейшие механизмы безопасности, которые с высокой вероятностью используются для защиты последних версий API. | Устаревшая документация усложняет поиск и исправление уязвимостей. Отсутствие инвентаризации активов и стратегии вывода из эксплуатации приводит к функционированию необновленных систем, которые могут быть использованы для кражи критичных данных. Точки входа API зачастую доступны без необходимости на то из-за использования современных подходов типа микро-сервисов, которые позволяют легко разворачить независимые приложения (например, облачные вычисления или kubernetes). | Злоумышленник может получить доступ к критичным данным или даже получить контроль над сервером через старую, необновленную версию API, использующую одну и ту же базу данных. |
10
+
11
+
## Как определить является ли API уязвимым?
10
12
11
13
The API might be vulnerable if:
12
14
@@ -25,9 +27,23 @@ The API might be vulnerable if:
25
27
outdated.
26
28
* Old or previous API versions are running unpatched.
27
29
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
+
## Примеры сценариев атаки
29
45
30
-
### Scenario#1
46
+
##Сценарий#1
31
47
32
48
After redesigning their applications, a local search service left an old API
33
49
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
36
52
`v1` in the URL gave the attacker access to the old, unprotected API,
37
53
exposing the personal identifiable information (PII) of over 100 Million users.
38
54
39
-
### Scenario #2
55
+
После переработки своих приложений локальный поисковый сервис оставил доступ к старой версию API (`api.someservice.com/v1`) без надлежащих мер защиты и с доступом к базе данных пользователей. Тестируя одну из последних выпущенных версий приложения, злоумышленник нашел адрес API (`api.someservice.com/v2`). Заменив `v2` на `v1` в URL, злоумышленник получил доступ к старому незащищенному API, предоставляющему доступ к персональным данным более 100 миллионов пользователей.
56
+
57
+
### Сценарий #2
40
58
41
59
A social network implemented a rate-limiting mechanism that blocks attackers
42
60
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
47
65
mechanism was not in place. The researcher was able to reset the password of any
48
66
user by using a simple brute-force to guess the 6 digits token.
49
67
50
-
## How To Prevent
68
+
Социальная сеть внедрила механизм ограничения количества запросов, не позволяющий злоумышленнику подобрать токен для сброса пароля. Этот механизм не был внедрен непосредственно в код API, а использовался в качестве отдельного компонента между клиентов и официальным API (`www.socialnetwork.com`).
69
+
Исследователь нашел бета версию API (`www.mbasic.beta.socialnetwork.com`), использующую тот же API, включая механизм сброса пароля, но не механизм ограничения количества запросов. Исследователь смог сбросить пароль любого пользователя, перебирая все возможные варианты кода из 6 цифр.
70
+
71
+
## Как предотвратить
51
72
52
73
* Inventory all API hosts and document important aspects of each one of them,
53
74
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.
65
86
* 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.
66
87
* 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.
67
88
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 включает улучшения, связанные с безопасностью, проводите анализ рисков для принятия решения о действиях по снижению рисков в старых версиях, например, переносу улучшения в старые версии без не нарушения совместимости, или отключению старой версии и переводу всех клиентов на последнюю версию.
0 commit comments