hacktricks/pentesting-web/uuid-insecurities.md

92 lines
6.8 KiB
Markdown

# UUID Insecurities
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Basic Information
Universally Unique Identifiers (UUIDs)는 **컴퓨터 시스템에서 정보를 고유하게 식별하는 데 사용되는 128비트 숫자**입니다. UUID는 중앙 조정 없이 고유 식별자가 필요한 애플리케이션에서 필수적입니다. 일반적으로 데이터베이스 키로 사용되며 문서 및 세션과 같은 다양한 요소를 참조할 수 있습니다.
UUID는 고유하고 **예측하기 어렵도록 설계되었습니다**. 특정 형식으로 구조화되어 있으며, 32개의 16진수 숫자로 구성된 5개의 그룹으로 나뉩니다. UUID에는 각각 다른 용도로 사용되는 다양한 버전이 있습니다:
* **UUID v1**은 시간 기반으로, 타임스탬프, 클록 시퀀스 및 노드 ID(MAC 주소)를 포함하지만 시스템 정보를 노출할 수 있습니다.
* **UUID v2**는 v1과 유사하지만 로컬 도메인에 대한 수정 사항이 포함되어 있습니다(널리 사용되지 않음).
* **UUID v3 및 v5**는 네임스페이스와 이름의 해시 값을 사용하여 UUID를 생성하며, v3는 MD5를 사용하고 v5는 SHA-1을 사용합니다.
* **UUID v4**는 거의 완전히 무작위로 생성되어 높은 수준의 익명성을 제공하지만 약간의 중복 위험이 있습니다.
{% hint style="success" %}
UUID의 버전 및 하위 버전은 일반적으로 UUID 내에서 같은 위치에 나타납니다. 예를 들어:\
12345678 - abcd - 1a56 - a539 - 103755193864\
xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx
* **M의 위치**는 UUID **버전**을 나타냅니다. 위의 예에서 UUID v**1**입니다.
* **N의 위치**는 UUID 변형을 나타냅니다.
{% endhint %}
## Sandwich attack
"샌드위치 공격"은 **웹 애플리케이션에서 UUID v1 생성의 예측 가능성을 악용하는 특정 유형의 공격**입니다. 특히 비밀번호 재설정과 같은 기능에서 UUID v1은 시간, 클록 시퀀스 및 노드의 MAC 주소를 기반으로 생성되므로 공격자가 이러한 UUID 중 일부를 시간에 가까운 시점에서 얻을 수 있다면 다소 예측 가능할 수 있습니다.
### Example
UUID v1을 사용하여 비밀번호 재설정 링크를 생성하는 웹 애플리케이션을 상상해 보십시오. 공격자가 이를 악용하여 무단 액세스를 얻는 방법은 다음과 같습니다:
1. **초기 설정**:
* 공격자는 두 개의 이메일 계정을 제어합니다: \`attacker1@acme.com\` 및 \`attacker2@acme.com\`.
* 대상의 이메일 계정은 \`victim@acme.com\`입니다.
2. **실행**:
* 공격자는 첫 번째 계정(\`attacker1@acme.com\`)에 대한 비밀번호 재설정을 트리거하고 UUID가 포함된 비밀번호 재설정 링크를 받습니다. 예를 들어 \`99874128-7592-11e9-8201-bb2f15014a14\`입니다.
* 즉시 후에 공격자는 피해자의 계정(\`victim@acme.com\`)에 대한 비밀번호 재설정을 트리거하고, 그 다음 두 번째 공격자 제어 계정(\`attacker2@acme.com\`)에 대해 신속하게 트리거합니다.
* 공격자는 두 번째 계정에 대한 재설정 링크를 UUID와 함께 받습니다. 예를 들어 \`998796b4-7592-11e9-8201-bb2f15014a14\`입니다.
3. **분석**:
* 공격자는 이제 시간에 가까운 두 개의 UUID(\`99874128\` 및 \`998796b4\`)를 가지고 있습니다. 시간 기반 UUID의 순차적 특성을 고려할 때, 피해자의 계정에 대한 UUID는 이 두 값 사이에 있을 가능성이 높습니다.
4. **무차별 대입 공격**:
* 공격자는 이 두 값 사이의 UUID를 생성하는 도구를 사용하고, 각 생성된 UUID를 테스트하여 비밀번호 재설정 링크에 접근을 시도합니다(예: \`https://www.acme.com/reset/\<generated-UUID>\`).
* 웹 애플리케이션이 이러한 시도를 적절히 속도 제한하거나 차단하지 않으면, 공격자는 범위 내의 모든 가능한 UUID를 신속하게 테스트할 수 있습니다.
5. **액세스 획득**:
* 피해자의 비밀번호 재설정 링크에 대한 올바른 UUID가 발견되면, 공격자는 피해자의 비밀번호를 재설정하고 무단으로 계정에 접근할 수 있습니다.
### Tools
* 샌드위치 공격을 자동으로 수행할 수 있는 도구: [**https://github.com/Lupin-Holmes/sandwich**](https://github.com/Lupin-Holmes/sandwich)
* Burp Suite에서 [**UUID Detector**](https://portswigger.net/bappstore/65f32f209a72480ea5f1a0dac4f38248) 확장을 사용하여 이러한 유형의 UUID를 감지할 수 있습니다.
## References
* [https://versprite.com/blog/universally-unique-identifiers/](https://versprite.com/blog/universally-unique-identifiers/)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}