# UUID 취약점 {{#include ../banners/hacktricks-training.md}} ## 기본 정보 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**는 거의 완전히 무작위로 생성되어 높은 수준의 익명성을 제공하지만 약간의 중복 위험이 있습니다. > [!TIP] > UUID의 버전과 하위 버전은 일반적으로 UUID 내에서 같은 위치에 나타납니다. 예를 들어:\ > 12345678 - abcd - 1a56 - a539 - 103755193864\ > xxxxxxxx - xxxx - Mxxx - Nxxx - xxxxxxxxxxxx > > - **M의 위치**는 UUID **버전**을 나타냅니다. 위의 예에서, 이는 UUID v**1**입니다. > - **N의 위치**는 UUID 변형을 나타냅니다. ## 샌드위치 공격 "샌드위치 공격"은 **웹 애플리케이션에서 UUID v1 생성의 예측 가능성을 악용하는 특정 유형의 공격**입니다. 특히 비밀번호 재설정과 같은 기능에서 그렇습니다. UUID v1은 시간, 클록 시퀀스 및 노드의 MAC 주소를 기반으로 생성되므로 공격자가 이러한 UUID 중 일부를 시간에 가까운 시점에서 얻을 수 있다면 다소 예측 가능할 수 있습니다. ### 예시 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/\\`). - 웹 애플리케이션이 이러한 시도를 적절히 속도 제한하거나 차단하지 않으면, 공격자는 범위 내의 모든 가능한 UUID를 신속하게 테스트할 수 있습니다. 5. **접근 획득:** - 피해자의 비밀번호 재설정 링크에 대한 올바른 UUID가 발견되면, 공격자는 피해자의 비밀번호를 재설정하고 그들의 계정에 무단으로 접근할 수 있습니다. ### 도구 - 도구를 사용하여 샌드위치 공격을 자동으로 수행할 수 있습니다: [**https://github.com/Lupin-Holmes/sandwich**](https://github.com/Lupin-Holmes/sandwich) - Burp Suite에서 확장 프로그램 [**UUID Detector**](https://portswigger.net/bappstore/65f32f209a72480ea5f1a0dac4f38248)를 사용하여 이러한 유형의 UUID를 감지할 수 있습니다. ## 참고 문헌 - [https://versprite.com/blog/universally-unique-identifiers/](https://versprite.com/blog/universally-unique-identifiers/) {{#include ../banners/hacktricks-training.md}}