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
Copy file name to clipboardExpand all lines: 2019/ru/src/0xa3-excessive-data-exposure.md
+1Lines changed: 1 addition & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -66,6 +66,7 @@ the site.
66
66
* Проверьте, что ответы API содержат только те данные, которые отображаются клиентским приложением.
67
67
* Разработчики серверной части должны всегда задаваться вопросом "Кто получит данные?" перед публикацией новых конечных точек API.
68
68
* Избегайте использования стандартных методов, например, `to_json()` или `to_string()`. Вместо этого вручную выбирайте свойства объектов, которые вы возвращаете в ответе.
69
+
* Классифицируйте критичную информацию и персональные данные, с которыми работает приложение, путем анализа всех вызовов API, возвращающих подобные данные, чтобы определить несут ли эти ответы риски безопасности.
69
70
* Внедрите механизм валидации базирующийся на проверке данных по схеме в качестве дополнительного уровня защиты. В рамках этого механизма определите данные возвращаемые каждой конечной точкой API (в том числе в ошибках) и обеспечьте, что только эти данные возвращаются пользователю.
|API Specific : Exploitability **2**|Prevalence**2** : Detectability **2**|Technical **2** : Business Specific|
6
+
|Зависит от API : Сложность эксплуатации **2**|Распространненность**2** : Сложность обнаружения **2**|Технические последствия **2** : Зависит от бизнеса|
7
7
| Exploitation usually requires an understanding of the business logic, objects' relations, and the API structure. Exploitation of mass assignment is easier in APIs, since by design they expose the underlying implementation of the application along with the properties’ names. | Modern frameworks encourage developers to use functions that automatically bind input from the client into code variables and internal objects. Attackers can use this methodology to update or overwrite sensitive object’s properties that the developers never intended to expose. | Exploitation may lead to privilege escalation, data tampering, bypass of security mechanisms, and more. |
8
8
9
-
## Is the API Vulnerable?
9
+
| Для эксплуатации зачастую требуется понимание бизнес логики, связей между объектами и структура API. Эксплуатация массового переназначения параметров проще реализуема в API, поскольку они изначально предусматривают общедоступность внутренней реализации API и названий свойств объектов. | Современные фреймфорки предлагают разработчикам функции, которые автоматически присваиют переменным и внутренним объектам значения соответствующих параметров из пользовательского ввода. Злоумышленник может использовать эту методологию, чтобы обновите или переназначить критичные свойства объектов, которые разработчик не намеревался делать доступными для пользователя. | Эксплуатация уязвимости может привести к повышению привилегий, злонамеренному изменению данных, обходу мезанизмов щашиты и так далее. |
10
+
11
+
## Как определить является ли API уязвимым?
10
12
11
13
Objects in modern applications might contain many properties. Some of these
12
14
properties should be updated directly by the client (e.g., `user.first_name` or
13
15
`user.address`) and some of them should not (e.g., `user.is_vip` flag).
14
16
17
+
Объекты в современных приложениях могут иметь большое количество свойств. Некоторые из них могут быть изменены напрямую клиентом (например, `user.first_name` или`user.address`), в то время как изменение других не должно быть доступно (например, флаг `user.is_vip`).
18
+
15
19
An API endpoint is vulnerable if it automatically converts client parameters
16
20
into internal object properties, without considering the sensitivity and the
17
21
exposure level of these properties. This could allow an attacker to update
18
22
object properties that they should not have access to.
19
23
24
+
Коненая точка API уязвима, если она автоматически присваивает предоставленные клиентом параметры свойствам внутренних объектов, не учитывая конфиденциальность и уровень доступности этих свойств. Это может позволить злоумышленнику изменить свойства объектов, к которым у него нет доступа.
25
+
20
26
Examples for sensitive properties:
21
27
22
28
***Permission-related properties**: `user.is_admin`, `user.is_vip` should only
@@ -26,49 +32,67 @@ Examples for sensitive properties:
26
32
***Internal properties**: `article.created_time` should only be set internally
27
33
by the application.
28
34
29
-
## Example Attack Scenarios
35
+
***Свойства относящиеся к привилегиям**: `user.is_admin`, `user.is_vip` должны определяться только администраторами.
36
+
***Свойства зависящие от процесса**: `user.cash` должны устанавливаться только внутри кода после проверки платежа.
37
+
***Внутренние свойства**: `article.created_time` должны устанавливаться только внутри кода самим приложением.
30
38
31
-
### Scenario #1
39
+
40
+
## Примеры сценариев атаки
41
+
42
+
## Сценарий #1
32
43
33
44
A ride sharing application provides a user the option to edit basic information
34
45
for their profile. During this process, an API call is sent to
35
46
`PUT /api/v1/users/me` with the following legitimate JSON object:
36
47
48
+
Приложение для совместных поездок позволяет пользователю редактировать базовую информацию своего профиля. В ходе редактирования отправляется следующий запрос `PUT /api/v1/users/me` с корректным JSON объектом в теле запроса:
49
+
37
50
```json
38
51
{"user_name":"inons","age":24}
39
52
```
40
53
41
54
The request `GET /api/v1/users/me` includes an additional credit_balance
42
55
property:
43
56
57
+
Запрос к `GET /api/v1/users/me` включает в себя дополнительное свойство credit_balance:
Since the endpoint is vulnerable to mass assignment, the attacker receives
55
72
credits without paying.
56
73
57
-
### Scenario #2
74
+
Поскольку конечная точка API узвима к массовому переназначению параметров, злоумышленник зачисляет деньги на свой баланс, не совершив платежа.
75
+
76
+
### Сценарий #2
58
77
59
78
A video sharing portal allows users to upload content and download content in
60
79
different formats. An attacker who explores the API found that the endpoint
61
80
`GET /api/v1/videos/{video_id}/meta_data` returns a JSON object with the video’s
62
81
properties. One of the properties is `"mp4_conversion_params":"-v codec h264"`,
63
82
which indicates that the application uses a shell command to convert the video.
64
83
84
+
Портал для обмена видео позволяет пользователям загружать и скачивать материалы в разынх форматах. Злоумышленник обследует API и обнаруживает, что конечная точка `GET /api/v1/videos/{video_id}/meta_data` возвращает JSON объект с параметрами видео. Один из параметров `"mp4_conversion_params":"-v codec h264"` дает понять, что приложение использует консольную команду для конвертации видео.
85
+
65
86
The attacker also found the endpoint `POST /api/v1/videos/new` is vulnerable to
66
87
mass assignment and allows the client to set any property of the video object.
67
88
The attacker sets a malicious value as follows:
68
89
`"mp4_conversion_params":"-v codec h264 && format C:/"`. This value will cause a
69
90
shell command injection once the attacker downloads the video as MP4.
70
91
71
-
## How To Prevent
92
+
Злоумышленник также обнаружил, что конечная точка `POST /api/v1/videos/new` уязвима к массовому переназначению параметров и позволяет клиенту установить значение любого свойства объекта видео.
93
+
Злоумышленник устанавливает следующее значение параметра: `"mp4_conversion_params":"-v codec h264 && format C:/"`. Это значение приведет к инъекции команды операционной системы, как только злоумышленник скачает видео в формате MP4.
94
+
95
+
## Как предотвратить
72
96
73
97
* If possible, avoid using functions that automatically bind a client’s input
74
98
into code variables or internal objects.
@@ -78,9 +102,14 @@ shell command injection once the attacker downloads the video as MP4.
78
102
* If applicable, explicitly define and enforce schemas for the input data
79
103
payloads.
80
104
81
-
## References
105
+
* Если возможно, избегайте использования функций, которые автоматически присваивают переменным и внутренним объектам сооветствующие значения из пользовательского ввода.
106
+
* Добавляйте в белые списки только свойства, которые могут быть изменены клиентом.
107
+
* Используйте встроенный функционал по добавлению в черный список свойств, к которым клиенты не могут иметь доступ.
108
+
* Если это возможно, определите схемы входящих данных и проверяйте входящие данные по ним.
109
+
110
+
## Ссылки
82
111
83
-
### External
112
+
### Внешние
84
113
85
114
*[CWE-915: Improperly Controlled Modification of Dynamically-Determined Object Attributes][1]
0 commit comments