From 4b7f0a34c865d79f3e39f1da17edc13a1a409869 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 6 Jan 2025 23:57:32 +0000 Subject: [PATCH] Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/ --- src/SUMMARY.md | 2 ++ .../aws-s3-privesc.md | 8 +++--- .../az-app-services-privesc.md | 16 +++++------ .../az-services/az-function-apps.md | 28 +++++++++---------- 4 files changed, 28 insertions(+), 26 deletions(-) diff --git a/src/SUMMARY.md b/src/SUMMARY.md index f14f299ff..442c03b1c 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -418,6 +418,7 @@ - [Az - Queue Storage](pentesting-cloud/azure-security/az-services/az-queue-enum.md) - [Az - Service Bus](pentesting-cloud/azure-security/az-services/az-servicebus-enum.md) - [Az - SQL](pentesting-cloud/azure-security/az-services/az-sql.md) + - [Az - Static Web Applications](pentesting-cloud/azure-security/az-services/az-static-web-apps.md) - [Az - Storage Accounts & Blobs](pentesting-cloud/azure-security/az-services/az-storage.md) - [Az - Table Storage](pentesting-cloud/azure-security/az-services/az-table-storage.md) - [Az - Virtual Machines & Network](pentesting-cloud/azure-security/az-services/vms/README.md) @@ -461,6 +462,7 @@ - [Az - Queue Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-queue-privesc.md) - [Az - Service Bus Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-servicebus-privesc.md) - [Az - Virtual Machines & Network Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-virtual-machines-and-network-privesc.md) + - [Az - Static Web App Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-static-web-apps-privesc.md) - [Az - Storage Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-storage-privesc.md) - [Az - SQL Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-sql-privesc.md) - [Az - Persistence](pentesting-cloud/azure-security/az-persistence/README.md) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md index 94266b32d..3d07abda7 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-s3-privesc.md @@ -34,7 +34,7 @@ ] } ``` -그리고 하이재킹이 가능한 이유는 **템플릿이 버킷에 업로드되는 순간부터** **템플릿이 배포되는 순간까지의 작은 시간 창**이 있기 때문입니다. 공격자는 자신의 계정에 **lambda function**을 생성하여 **버킷 알림이 전송될 때 트리거**되도록 할 수 있으며, **버킷**의 **내용**을 **하이재킹**할 수 있습니다. +그리고 하이재킹이 가능한 이유는 **템플릿이 버킷에 업로드되는 순간부터** **템플릿이 배포되는 순간까지의 작은 시간 창**이 있기 때문입니다. 공격자는 자신의 계정에 **lambda function**을 생성하여 **버킷 알림이 전송될 때 트리거**되도록 하고, **버킷**의 **내용**을 **하이재킹**할 수 있습니다. ![](<../../../images/image (174).png>) @@ -56,7 +56,7 @@ Pacu 모듈 [`cfn__resouce_injection`](https://github.com/RhinoSecurityLabs/pacu 따라서 이러한 파일에 대해 나열된 권한이 있는 경우, `terraform`의 권한으로 파이프라인에서 RCE를 얻을 수 있는 공격 벡터가 있습니다. 대부분의 경우 `AdministratorAccess`로 클라우드 계정의 관리자가 됩니다. 또한 이 벡터를 사용하여 `terraform`이 합법적인 리소스를 삭제하도록 하여 서비스 거부 공격을 수행할 수 있습니다. -*Terraform Security* 페이지의 *Abusing Terraform State Files* 섹션에 있는 설명을 따라 직접 사용할 수 있는 익스플로잇 코드를 확인하세요: +직접 사용할 수 있는 익스플로잇 코드는 *Terraform Security* 페이지의 *Abusing Terraform State Files* 섹션의 설명을 따르세요: {{#ref}} pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files @@ -64,7 +64,7 @@ pentesting-ci-cd/terraform-security.md#abusing-terraform-state-files ### `s3:PutBucketPolicy` -공격자는 **같은 계정에서** 있어야 하며, 그렇지 않으면 `The specified method is not allowed` 오류가 발생합니다. 이 권한을 가진 공격자는 자신에게 더 많은 권한을 부여하여 버킷에 대한 읽기, 쓰기, 수정, 삭제 및 노출을 허용할 수 있습니다. +공격자는 **같은 계정에서** 있어야 하며, 그렇지 않으면 `The specified method is not allowed` 오류가 발생합니다. 이 권한을 가진 공격자는 자신에게 버킷에 대한 더 많은 권한을 부여하여 읽기, 쓰기, 수정, 삭제 및 버킷을 노출할 수 있습니다. ```bash # Update Bucket policy aws s3api put-bucket-policy --policy file:///root/policy.json --bucket @@ -177,7 +177,7 @@ aws s3api put-object-acl --bucket --key flag --access-control-poli ``` ### `s3:GetObjectAcl`, `s3:PutObjectVersionAcl` -이 권한을 가진 공격자는 특정 객체 버전에 Acl을 설정할 수 있을 것으로 예상됩니다. +이 권한을 가진 공격자는 특정 객체 버전에 Acl을 설정할 수 있어야 합니다. ```bash aws s3api get-object-acl --bucket --key flag aws s3api put-object-acl --bucket --key flag --version-id --access-control-policy file://objacl.json diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md index 68ef6a895..951413676 100644 --- a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md @@ -37,7 +37,7 @@ ssh root@127.0.0.1 -p 39895 2. Azure 계정으로 확장에 로그인합니다. 3. 구독 내 모든 App 서비스를 나열합니다. 4. 디버깅할 App 서비스를 선택하고, 마우스 오른쪽 버튼을 클릭한 후 "디버깅 시작"을 선택합니다. -5. 앱에 디버깅이 활성화되어 있지 않으면, 확장이 이를 활성화하려고 시도하지만, 귀하의 계정은 `Microsoft.Web/sites/config/write` 권한이 필요합니다. +5. 앱에 디버깅이 활성화되어 있지 않으면, 확장이 이를 활성화하려고 시도하지만, 귀하의 계정은 이를 수행하기 위해 `Microsoft.Web/sites/config/write` 권한이 필요합니다. ### SCM 자격 증명 얻기 및 기본 인증 활성화 @@ -98,7 +98,7 @@ az webapp deployment list-publishing-profiles --name --resource-group 또한, **SCM URL은 `.scm.azurewebsites.net`**입니다. -- 권한 **`Microsoft.Web/sites/config/list/action`**은 호출할 수 있습니다: +- 권한 **`Microsoft.Web/sites/config/list/action`**은 호출을 허용합니다: ```bash az webapp deployment list-publishing-credentials --name --resource-group # Example output @@ -153,17 +153,17 @@ az rest --method PUT \ ``` ### SCM 자격 증명을 사용하여 코드 게시 -유효한 SCM 자격 증명만 있으면 **코드 게시**가 가능합니다. 이는 다음 명령어를 사용하여 수행할 수 있습니다. +유효한 SCM 자격 증명만 있으면 **코드**를 App 서비스에 **게시**할 수 있습니다. 이는 다음 명령을 사용하여 수행할 수 있습니다. 이 파이썬 예제를 위해 https://github.com/Azure-Samples/msdocs-python-flask-webapp-quickstart에서 리포를 다운로드하고 원하는 **변경**을 한 다음 **`zip -r app.zip .`**을 실행하여 압축할 수 있습니다. -그런 다음 다음 명령어로 웹 앱에 **코드를 게시**할 수 있습니다: +그런 다음 다음 명령을 사용하여 웹 앱에 **코드를 게시**할 수 있습니다: ```bash curl -X POST "/api/publish?type=zip" --data-binary "@./app.zip" -u ':' -H "Content-Type: application/octet-stream" ``` ### Webjobs: Microsoft.Web/sites/publish/Action | SCM 자격 증명 -언급된 Azure 권한은 SCM 자격 증명으로 수행할 수 있는 여러 흥미로운 작업을 수행할 수 있습니다: +언급된 Azure 권한은 SCM 자격 증명으로도 수행할 수 있는 여러 흥미로운 작업을 수행할 수 있습니다: - **Webjobs** 로그 읽기: ```bash @@ -225,7 +225,7 @@ az rest --method GET \ ``` 이 명령은 Github, Bitbucket, Dropbox 및 OneDrive에 대한 토큰을 반환합니다. -여기 토큰을 확인하기 위한 몇 가지 명령 예제가 있습니다: +여기 토큰을 확인하기 위한 몇 가지 명령 예가 있습니다: ```bash # GitHub – List Repositories curl -H "Authorization: token " \ @@ -263,14 +263,14 @@ https://graph.microsoft.com/v1.0/me/drive/root/children - **`Microsoft.Web/sites/config/list/action`**: 그런 다음 `az webapp deployment list-publishing-credentials --name --resource-group `을 실행합니다. > [!WARNING] -> 권한 `Microsoft.Web/sites/config/list/action`과 SCM 자격 증명을 보유하면, 이전 섹션에서 언급한 바와 같이 웹앱에 배포하는 것이 항상 가능합니다 (제3자 제공자를 사용하도록 구성된 경우에도). +> 권한 `Microsoft.Web/sites/config/list/action`과 SCM 자격 증명을 보유하면, 이전 섹션에서 언급한 바와 같이 제3자 제공자를 사용하도록 구성된 경우에도 웹앱에 배포하는 것이 항상 가능합니다. > [!WARNING] > 아래 권한을 보유하면 웹앱이 다르게 구성되었더라도 **임의의 컨테이너를 실행하는 것도 가능합니다**. ### `Microsoft.Web/sites/config/Write`, `Microsoft.Web/sites/config/Read`, `Microsoft.Web/sites/config/list/Action`, `Microsoft.Web/sites/Read` -이 권한 세트는 웹앱에서 사용되는 **컨테이너를 수정**할 수 있게 해줍니다. 공격자는 이를 악용하여 웹앱이 악성 컨테이너를 실행하도록 만들 수 있습니다. +이는 웹앱에서 사용되는 **컨테이너를 수정할 수 있는 권한 세트**입니다. 공격자는 이를 악용하여 웹앱이 악성 컨테이너를 실행하도록 만들 수 있습니다. ```bash az webapp config container set \ --name \ diff --git a/src/pentesting-cloud/azure-security/az-services/az-function-apps.md b/src/pentesting-cloud/azure-security/az-services/az-function-apps.md index 4ddccde1c..2f83a457c 100644 --- a/src/pentesting-cloud/azure-security/az-services/az-function-apps.md +++ b/src/pentesting-cloud/azure-security/az-services/az-function-apps.md @@ -11,7 +11,7 @@ ### Different Plans -- **Flex Consumption Plan**: 수요에 따라 함수 인스턴스를 추가하거나 제거하는 **동적 이벤트 기반 스케일링**을 제공하며, 사용한 만큼만 지불하는 요금제를 제공합니다. **가상 네트워킹** 및 **사전 프로비저닝된 인스턴스**를 지원하여 콜드 스타트를 줄여주며, 컨테이너 지원이 필요하지 않은 **변동 작업 부하**에 적합합니다. +- **Flex Consumption Plan**: 수요에 따라 함수 인스턴스를 추가하거나 제거하는 **동적 이벤트 기반 스케일링**을 제공하며, 사용한 만큼만 지불하는 가격 모델을 갖습니다. **가상 네트워킹** 및 **사전 프로비저닝된 인스턴스**를 지원하여 콜드 스타트를 줄여주며, 컨테이너 지원이 필요하지 않은 **변동 작업 부하**에 적합합니다. - **Traditional Consumption Plan**: 기본 서버리스 옵션으로, **함수가 실행될 때만 컴퓨트 리소스에 대해 지불**합니다. 수신 이벤트에 따라 자동으로 스케일링되며 **콜드 스타트 최적화**가 포함되어 있지만, 컨테이너 배포는 지원하지 않습니다. 자동 스케일링이 필요한 **간헐적 작업 부하**에 이상적입니다. - **Premium Plan**: **일관된 성능**을 위해 설계되었으며, 콜드 스타트를 없애기 위해 **사전 예열된 작업자**를 제공합니다. **연장된 실행 시간, 가상 네트워킹**을 제공하며, **사용자 정의 Linux 이미지**를 지원하여 높은 성능과 고급 기능이 필요한 **미션 크리티컬 애플리케이션**에 적합합니다. - **Dedicated Plan**: 예측 가능한 청구가 가능한 전용 가상 머신에서 실행되며, 수동 또는 자동 스케일링을 지원합니다. 동일한 계획에서 여러 앱을 실행할 수 있으며, **컴퓨트 격리**를 제공하고 App Service Environments를 통해 **안전한 네트워크 액세스**를 보장하여 일관된 리소스 할당이 필요한 **장기 실행 애플리케이션**에 이상적입니다. @@ -19,9 +19,9 @@ ### **Storage Buckets** -컨테이너화되지 않은 새로운 Function App을 생성할 때 (코드를 실행할 수 있도록 제공하는 경우), **코드 및 기타 Function 관련 데이터는 Storage 계정에 저장됩니다**. 기본적으로 웹 콘솔은 코드를 저장하기 위해 함수당 새 Storage 계정을 생성합니다. +컨테이너화되지 않은 새로운 Function App을 생성할 때, **코드 및 기타 Function 관련 데이터는 Storage 계정에 저장됩니다**. 기본적으로 웹 콘솔은 코드를 저장하기 위해 함수당 새 Storage 계정을 생성합니다. -또한, 버킷 내의 코드를 수정하면 (저장될 수 있는 다양한 형식에서), **앱의 코드는 새로운 코드로 수정되어 다음에 함수가 호출될 때 실행됩니다**. +또한, 버킷 내의 코드를 수정하면 (저장될 수 있는 다양한 형식에서) **앱의 코드가 새 코드로 수정되어 다음에 함수가 호출될 때 실행됩니다**. > [!CAUTION] > 공격자의 관점에서 매우 흥미로운 점은 **이 버킷에 대한 쓰기 권한**이 있으면 공격자가 **코드를 손상시키고 Function App 내의 관리되는 ID에 대한 권한을 상승시킬 수 있다는 점입니다**. @@ -44,13 +44,13 @@ HTTP 트리거를 사용할 때: ### **Function App Settings & Environment Variables** -앱 내에서 환경 변수를 구성할 수 있으며, 이 변수는 민감한 정보를 포함할 수 있습니다. 또한 기본적으로 **`AzureWebJobsStorage`** 및 **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (기타 포함)과 같은 env 변수가 생성됩니다. 이들은 **애플리케이션 데이터가 포함된 Storage 계정을 완전한 권한으로 제어하는 계정 키를 포함하고 있기 때문에 특별히 흥미롭습니다**. 이러한 설정은 Storage 계정에서 코드를 실행하는 데에도 필요합니다. +앱 내에서 환경 변수를 구성할 수 있으며, 이 변수는 민감한 정보를 포함할 수 있습니다. 또한 기본적으로 **`AzureWebJobsStorage`** 및 **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(기타 포함)과 같은 env 변수가 생성됩니다. 이들은 **애플리케이션 데이터가 포함된 Storage 계정을 완전한 권한으로 제어하는 계정 키를 포함하기 때문에 특히 흥미롭습니다**. 이러한 설정은 Storage 계정에서 코드를 실행하는 데에도 필요합니다. 이러한 env 변수 또는 구성 매개변수는 함수가 코드를 실행하는 방식을 제어합니다. 예를 들어 **`WEBSITE_RUN_FROM_PACKAGE`**가 존재하면 애플리케이션 코드가 위치한 URL을 나타냅니다. ### **Function Sandbox** -리눅스 샌드박스 내에서 소스 코드는 **`/home/site/wwwroot`**의 **`function_app.py`** 파일에 위치하며 (Python을 사용하는 경우), 코드를 실행하는 사용자는 **`app`**입니다 (sudo 권한 없음). +리눅스 샌드박스 내에서 소스 코드는 **`/home/site/wwwroot`**의 **`function_app.py`** 파일에 위치하며(파이썬을 사용하는 경우), 코드를 실행하는 사용자는 **`app`**입니다(권한 없음). **Windows** 함수에서 NodeJS를 사용하는 경우 코드는 **`C:\home\site\wwwroot\HttpTrigger1\index.js`**에 위치하며, 사용자 이름은 **`mawsFnPlaceholder8_f_v4_node_20_x86`**이고 **그룹**의 일부입니다: `Mandatory Label\High Mandatory Level Label`, `Everyone`, `BUILTIN\Users`, `NT AUTHORITY\INTERACTIVE`, `CONSOLE LOGON`, `NT AUTHORITY\Authenticated Users`, `NT AUTHORITY\This Organization`, `BUILTIN\IIS_IUSRS`, `LOCAL`, `10-30-4-99\Dwas Site Users`. @@ -65,11 +65,11 @@ HTTP 트리거를 사용할 때: > > 시스템 관리 ID가 사용되지 않고 하나 이상의 사용자 관리 ID가 함수에 연결된 경우, 기본적으로 토큰을 얻을 수 없습니다. -[**PEASS scripts**](https://github.com/peass-ng/PEASS-ng)를 사용하여 메타데이터 엔드포인트에서 기본 관리 ID의 토큰을 얻을 수 있습니다. 또는 다음과 같이 **수동으로** 얻을 수 있습니다: +[**PEASS 스크립트**](https://github.com/peass-ng/PEASS-ng)를 사용하여 메타데이터 엔드포인트에서 기본 관리 ID의 토큰을 얻을 수 있습니다. 또는 다음과 같이 **수동으로** 얻을 수 있습니다: {% embed url="https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf#azure-vm" %} -함수가 연결된 모든 Managed Identities를 **확인하는 방법을 찾아야 합니다**. 그렇지 않으면 메타데이터 엔드포인트는 **기본 ID만 사용합니다** (자세한 내용은 이전 링크를 확인하세요). +함수가 연결된 **모든 Managed Identities를 확인하는 방법**을 찾아야 합니다. 그렇지 않으면 메타데이터 엔드포인트는 **기본 ID만 사용합니다**(자세한 내용은 이전 링크를 확인하세요). ## Access Keys @@ -84,10 +84,10 @@ HTTP 트리거를 사용하여 함수 내에서 엔드포인트를 생성할 때 **키 유형:** -- **Function Keys:** 함수 키는 기본 또는 사용자 정의일 수 있으며, Function App 내의 **특정 함수 엔드포인트**에만 접근을 허용하도록 설계되었습니다. 이를 통해 엔드포인트에 대한 보다 세밀한 접근 제어가 가능합니다. -- **Host Keys:** 호스트 키는 기본 또는 사용자 정의일 수 있으며, **FUNCTION 접근 수준**으로 Function App 내의 **모든 함수 엔드포인트**에 접근을 제공합니다. -- **Master Key:** 마스터 키(`_master`)는 모든 함수 엔드포인트에 대한 접근을 포함하여 **승격된 권한**을 제공하는 관리 키입니다. 이 **키는 취소할 수 없습니다.** -- **System Keys:** 시스템 키는 **특정 확장에 의해 관리되며**, 내부 구성 요소에서 사용하는 웹훅 엔드포인트에 접근하는 데 필요합니다. 예를 들어, Event Grid 트리거 및 Durable Functions는 시스템 키를 사용하여 해당 API와 안전하게 상호작용합니다. +- **Function Keys:** 함수 키는 기본 또는 사용자 정의일 수 있으며, Function App 내의 **특정 함수 엔드포인트**에만 접근을 허용하도록 설계되었습니다. +- **Host Keys:** 호스트 키는 기본 또는 사용자 정의일 수 있으며, FUNCTION 접근 수준으로 Function App 내의 **모든 함수 엔드포인트**에 접근을 제공합니다. +- **Master Key:** 마스터 키(`_master`)는 모든 함수 엔드포인트에 대한 접근을 포함하여 권한이 상승된 관리 키입니다(ADMIN 접근 수준 포함). 이 **키는 취소할 수 없습니다.** +- **System Keys:** 시스템 키는 **특정 확장에 의해 관리되며**, 내부 구성 요소에서 사용하는 웹훅 엔드포인트에 접근하는 데 필요합니다. 예를 들어 Event Grid 트리거 및 Durable Functions는 시스템 키를 사용하여 해당 API와 안전하게 상호작용합니다. > [!TIP] > 키를 사용하여 함수 API 엔드포인트에 접근하는 예: @@ -96,7 +96,7 @@ HTTP 트리거를 사용하여 함수 내에서 엔드포인트를 생성할 때 ### Basic Authentication -App Services와 마찬가지로, Functions는 **SCM** 및 **FTP**에 연결하여 코드를 배포하기 위해 Azure에서 제공하는 **URL의 사용자 이름과 비밀번호**를 사용한 기본 인증을 지원합니다. 이에 대한 자세한 내용은: +App Services와 마찬가지로, Functions는 **SCM** 및 **FTP**에 연결하여 코드를 배포하기 위해 Azure에서 제공하는 **사용자 이름과 비밀번호가 포함된 URL**을 사용하여 기본 인증을 지원합니다. 이에 대한 자세한 내용은: {{#ref}} az-app-services.md @@ -104,7 +104,7 @@ az-app-services.md ### Github Based Deployments -함수가 Github 리포지토리에서 생성될 때 Azure 웹 콘솔은 **특정 리포지토리에서 자동으로 Github Workflow를 생성**할 수 있도록 하여 이 리포지토리가 업데이트될 때마다 함수의 코드가 업데이트됩니다. 실제로 Python 함수에 대한 Github Action yaml은 다음과 같습니다: +함수가 Github 리포지토리에서 생성될 때 Azure 웹 콘솔은 **특정 리포지토리에서 자동으로 Github Workflow를 생성**할 수 있도록 하여 이 리포지토리가 업데이트될 때마다 함수의 코드가 업데이트됩니다. 실제로 파이썬 함수에 대한 Github Action yaml은 다음과 같습니다:
@@ -199,7 +199,7 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }} ### Container Based Deployments -모든 요금제가 컨테이너 배포를 허용하는 것은 아니지만, 허용하는 경우 구성에는 컨테이너의 URL이 포함됩니다. API에서 **`linuxFxVersion`** 설정은 `DOCKER|mcr.microsoft.com/...`와 같은 형태를 가질 것이며, 웹 콘솔에서는 구성에 **image settings**가 표시됩니다. +모든 요금제가 컨테이너 배포를 허용하는 것은 아니지만, 허용하는 경우에는 구성에 컨테이너의 URL이 포함됩니다. API에서 **`linuxFxVersion`** 설정은 `DOCKER|mcr.microsoft.com/...`와 같은 형태를 가질 것이며, 웹 콘솔에서는 구성에 **image settings**가 표시됩니다. 또한, **소스 코드는 함수와 관련된 스토리지** 계정에 저장되지 않습니다. 필요하지 않기 때문입니다.