AWS - Lambda Privesc
Last updated
Last updated
AWS ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°:HackTricks Training AWS Red Team Expert (ARTE) GCP ν΄νΉ λ°°μ°κΈ° λ° μ°μ΅νκΈ°: HackTricks Training GCP Red Team Expert (GRTE)
lambdaμ λν λ λ§μ μ 보λ λ€μμμ νμΈνμΈμ:
iam:PassRole
, lambda:CreateFunction
, (lambda:InvokeFunction
| lambda:InvokeFunctionUrl
)iam:PassRole
, lambda:CreateFunction
, λ° lambda:InvokeFunction
κΆνμ΄ μλ μ¬μ©μλ κΆνμ μμΉμν¬ μ μμ΅λλ€.
κ·Έλ€μ μλ‘μ΄ Lambda ν¨μλ₯Ό μμ±νκ³ κΈ°μ‘΄ IAM μν μ ν λΉνμ¬, ν΄λΉ μν κ³Ό κ΄λ ¨λ κΆνμ ν¨μμ λΆμ¬ν μ μμ΅λλ€. μ¬μ©μλ μ΄ Lambda ν¨μμ μ½λλ₯Ό μμ±νκ³ μ
λ‘λν μ μμ΅λλ€ (μ: rev shell).
ν¨μκ° μ€μ λλ©΄ μ¬μ©μλ AWS APIλ₯Ό ν΅ν΄ Lambda ν¨μλ₯Ό νΈμΆνμ¬ μ€νμ νΈλ¦¬κ±°ν μ μμ΅λλ€. μ΄ μ κ·Ό λ°©μμ μ¬μ©μκ° Lambda ν¨μλ₯Ό ν΅ν΄ κ°μ μ μΌλ‘ μμ
μ μνν μ μκ² νλ©°, ν΄λΉ ν¨μμ μ°κ²°λ IAM μν μ λΆμ¬λ μ κ·Ό μμ€μΌλ‘ μμ
μ μνν©λλ€.\
곡격μλ μ΄λ₯Ό μ μ©νμ¬ rev shellμ μ»κ³ ν ν°μ νμΉ μ μμ΅λλ€:
λΉμ μ λν λλ€ μν κΆνμ μ μ©ν μ μμ΅λλ€. λλ€ μν μ μΆ©λΆν κΆνμ΄ μλ€λ©΄, μ΄λ₯Ό μ¬μ©νμ¬ κ΄λ¦¬μ κΆνμ λΆμ¬ν μ μμ΅λλ€:
λλ€μ μν μ격 μ¦λͺ μ μΈλΆ μ°κ²° μμ΄ μ μΆνλ κ²λ κ°λ₯ν©λλ€. μ΄λ λ΄λΆ μμ μ μ¬μ©λλ λ€νΈμν¬ κ²©λ¦¬ λλ€μ μ μ©ν κ²μ λλ€. μλ°©ν₯ μ Έμ νν°λ§νλ μ μ μλ 보μ κ·Έλ£Ήμ΄ μλ κ²½μ°, μ΄ μ½λλ λλ€μ μΆλ ₯μΌλ‘ μ격 μ¦λͺ μ μ§μ μ μΆν μ μκ² ν΄μ€λλ€.
μ μ¬μ μν₯: μ§μ λ μμμ λλ€ μλΉμ€ μν λ‘ μ§μ μ μΈ κΆν μμΉ.
ν₯λ―Έλ‘κ² λ³΄μΌ μ μμ§λ§ **lambda:InvokeAsync
**λ λ¨λ
μΌλ‘ **aws lambda invoke-async
**λ₯Ό μ€νν μ μμμ μ μνμΈμ. lambda:InvokeFunction
λ νμν©λλ€.
iam:PassRole
, lambda:CreateFunction
, lambda:AddPermission
μ΄μ μλ리μ€μ λ§μ°¬κ°μ§λ‘, lambda:AddPermission
κΆνμ΄ μλ€λ©΄ lambda:InvokeFunction
κΆνμ λΆμ¬ν μ μμ΅λλ€.
μ μ¬μ μν₯: μ§μ λ μμμ λλ€ μλΉμ€ μν λ‘ μ§μ κΆν μμΉ.
iam:PassRole
, lambda:CreateFunction
, lambda:CreateEventSourceMapping
iam:PassRole
, lambda:CreateFunction
, λ° lambda:CreateEventSourceMapping
κΆνμ΄ μλ μ¬μ©μ(κ·Έλ¦¬κ³ μ μ¬μ μΌλ‘ dynamodb:PutItem
λ° dynamodb:CreateTable
)λ lambda:InvokeFunction μμ΄λ κ°μ μ μΌλ‘ κΆνμ μμΉμν¬ μ μμ΅λλ€.
κ·Έλ€μ μ
μ± μ½λλ₯Ό ν¬ν¨ν Lambda ν¨μλ₯Ό μμ±νκ³ κΈ°μ‘΄ IAM μν μ ν λΉν μ μμ΅λλ€.
μ¬μ©μλ Lambdaλ₯Ό μ§μ νΈμΆνλ λμ , κΈ°μ‘΄ DynamoDB ν μ΄λΈμ μ€μ νκ±°λ νμ©νμ¬ μ΄λ²€νΈ μμ€ λ§€νμ ν΅ν΄ Lambdaμ μ°κ²°ν©λλ€. μ΄ μ€μ μ ν μ΄λΈμ μ νλͺ©μ΄ μΆκ°λ λ Lambda ν¨μκ° μλμΌλ‘ νΈλ¦¬κ±°λλλ‘ λ³΄μ₯νλ©°, μ΄λ μ¬μ©μμ νλμ΄λ λ€λ₯Έ νλ‘μΈμ€μ μν΄ μ΄λ£¨μ΄μ Έ Lambda ν¨μλ₯Ό κ°μ μ μΌλ‘ νΈμΆνκ³ μ λ¬λ IAM μν μ κΆνμΌλ‘ μ½λλ₯Ό μ€νν©λλ€.
λ§μ½ DynamoDBκ° AWS νκ²½μμ μ΄λ―Έ νμ±νλμ΄ μλ€λ©΄, μ¬μ©μλ Lambda ν¨μμ λν μ΄λ²€νΈ μμ€ λ§€νμ μ€μ νκΈ°λ§ νλ©΄ λ©λλ€. κ·Έλ¬λ DynamoDBκ° μ¬μ©λμ§ μλ κ²½μ°, μ¬μ©μλ μ€νΈλ¦¬λ°μ΄ νμ±νλ μ ν μ΄λΈμ μμ±ν΄μΌ ν©λλ€:
μ΄μ μ΄λ²€νΈ μμ€ λ§€νμ μμ±νμ¬ Lambda ν¨μλ₯Ό DynamoDB ν μ΄λΈμ μ°κ²°νλ κ²μ΄ κ°λ₯ν©λλ€:
DynamoDB μ€νΈλ¦Όμ μ°κ²°λ Lambda ν¨μμ ν¨κ» 곡격μλ DynamoDB μ€νΈλ¦Όμ νμ±ννμ¬ Lambdaλ₯Ό κ°μ μ μΌλ‘ νΈλ¦¬κ±°ν μ μμ΅λλ€. μ΄λ DynamoDB ν μ΄λΈμ νλͺ©μ μ½μ ν¨μΌλ‘μ¨ μνν μ μμ΅λλ€:
μ μ¬μ μν₯: μ§μ λ lambda μλΉμ€ μν λ‘ μ§μ μ μΈ κΆν μμΉ.
lambda:AddPermission
μ΄ κΆνμ κ°μ§ 곡격μλ μμ (λλ λ€λ₯Έ μ¬λ)μκ² λͺ¨λ κΆνμ λΆμ¬ν μ μμ΅λλ€ (μ΄λ 리μμ€μ λν μ‘μΈμ€λ₯Ό λΆμ¬νκΈ° μν΄ λ¦¬μμ€ κΈ°λ° μ μ± μ μμ±ν©λλ€):
μ μ¬μ μν₯: μ½λλ₯Ό μμ νκ³ μ€νν μ μλ κΆνμ λΆμ¬νμ¬ lambda μλΉμ€ μν λ‘ μ§μ μ μΈ κΆν μμΉμ΄ λ°μν μ μμ΅λλ€.
lambda:AddLayerVersionPermission
μ΄ κΆνμ κ°μ§ 곡격μλ μμ (λλ λ€λ₯Έ μ¬λ)μκ² lambda:GetLayerVersion
κΆνμ λΆμ¬ν μ μμ΅λλ€. κ·Έλ λ μ΄μ΄μ μ κ·Όνμ¬ μ·¨μ½μ μ΄λ λ―Όκ°ν μ 보λ₯Ό κ²μν μ μμ΅λλ€.
μ μ¬μ μν₯: λ―Όκ°ν μ 보μ λν μ μ¬μ μ κ·Ό.
lambda:UpdateFunctionCode
lambda:UpdateFunctionCode
κΆνμ κ°μ§ μ¬μ©μλ IAM μν μ μ°κ²°λ κΈ°μ‘΄ Lambda ν¨μμ μ½λλ₯Ό μμ ν μ μλ μ μ¬λ ₯μ κ°μ§κ³ μμ΅λλ€.
곡격μλ IAM μ격 μ¦λͺ
μ μ μΆνκΈ° μν΄ lambdaμ μ½λλ₯Ό μμ ν μ μμ΅λλ€.
곡격μκ° ν¨μλ₯Ό μ§μ νΈμΆν μ μλ λ₯λ ₯μ΄ μλλΌλ, Lambda ν¨μκ° μ΄λ―Έ μ‘΄μ¬νκ³ μ΄μ μ€μ΄λΌλ©΄, κΈ°μ‘΄ μν¬νλ‘μ°λ μ΄λ²€νΈλ₯Ό ν΅ν΄ νΈλ¦¬κ±°λ κ°λ₯μ±μ΄ λμ μμ λ μ½λμ μ€νμ κ°μ μ μΌλ‘ μ΄μ§ν μ μμ΅λλ€.
μ μ¬μ μν₯: μ¬μ©λ lambda μλΉμ€ μν μ λν μ§μ μ μΈ κΆν μμΉ.
lambda:UpdateFunctionConfiguration
μ΄ κΆνμΌλ‘ νκ²½ λ³μλ₯Ό μΆκ°νμ¬ Lambdaκ° μμμ μ½λλ₯Ό μ€ννλλ‘ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, νμ΄μ¬μμλ νκ²½ λ³μ PYTHONWARNING
λ° BROWSER
λ₯Ό μ
μ©νμ¬ νμ΄μ¬ νλ‘μΈμ€κ° μμμ λͺ
λ Ήμ μ€ννλλ‘ ν μ μμ΅λλ€:
λ€λ₯Έ μ€ν¬λ¦½ν μΈμ΄μ κ²½μ° μ¬μ©ν μ μλ λ€λ₯Έ νκ²½ λ³μκ° μμ΅λλ€. μμΈν λ΄μ©μ λ€μμ μ€ν¬λ¦½ν μΈμ΄ νμ μΉμ μ νμΈνμΈμ:
Lambda Layersλ μ½λλ₯Ό λλ€ ν¨μμ ν¬ν¨ν μ μμ§λ§ λ³λλ‘ μ μ₯ν μ μκ² ν΄μ£Όλ―λ‘ ν¨μ μ½λλ μκ² μ μ§λκ³ μ¬λ¬ ν¨μκ° μ½λλ₯Ό 곡μ ν μ μμ΅λλ€.
λλ€ λ΄λΆμμ λ€μκ³Ό κ°μ ν¨μλ₯Ό μ¬μ©νμ¬ νμ΄μ¬ μ½λκ° λ‘λλλ κ²½λ‘λ₯Ό νμΈν μ μμ΅λλ€:
μ΄κ³³λ€μ λ€μκ³Ό κ°μ΅λλ€:
/var/task
/opt/python/lib/python3.7/site-packages
/opt/python
/var/runtime
/var/lang/lib/python37.zip
/var/lang/lib/python3.7
/var/lang/lib/python3.7/lib-dynload
/var/lang/lib/python3.7/site-packages
/opt/python/lib/python3.7/site-packages
/opt/python
μλ₯Ό λ€μ΄, λΌμ΄λΈλ¬λ¦¬ boto3λ /var/runtime/boto3
(4λ²μ§Έ μμΉ)μμ λ‘λλ©λλ€.
lambda:UpdateFunctionConfiguration
κΆνμ λ¨μ©νμ¬ μ λ μ΄μ΄λ₯Ό μΆκ°νλ κ²μ΄ κ°λ₯ν©λλ€. μμμ μ½λλ₯Ό μ€ννλ €λ©΄ μ΄ λ μ΄μ΄μ λλ€κ° κ°μ Έμ¬ λΌμ΄λΈλ¬λ¦¬κ° ν¬ν¨λμ΄μΌ ν©λλ€. λλ€μ μ½λλ₯Ό μ½μ μ μλ€λ©΄ μ΄λ₯Ό μ½κ² μ°Ύμ μ μμΌλ©°, λλ€κ° μ΄λ―Έ λ μ΄μ΄λ₯Ό μ¬μ©νκ³ μμ κ°λ₯μ±λ μλ€λ μ μ μ μνμΈμ. μ΄ κ²½μ° λ μ΄μ΄λ₯Ό λ€μ΄λ‘λνκ³ κ·Έ μμ μ½λλ₯Ό μΆκ°ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, λλ€κ° λΌμ΄λΈλ¬λ¦¬ boto3λ₯Ό μ¬μ©νκ³ μλ€κ³ κ°μ ν΄ λ³΄κ² μ΅λλ€. μ΄λ λΌμ΄λΈλ¬λ¦¬μ μ΅μ λ²μ μΌλ‘ λ‘컬 λ μ΄μ΄λ₯Ό μμ±ν κ²μ λλ€:
You can open ./lambda_layer/boto3/__init__.py
and μ μ μ½λμ λ°±λμ΄ μΆκ° (μ: μ격 μ¦λͺ
μ μ μΆνκ±°λ 리λ²μ€ μ
Έμ μ»λ ν¨μ).
Then, zip that ./lambda_layer
directory and μλ‘μ΄ λλ€ λ μ΄μ΄λ₯Ό μ
λ‘λ your own account (or in the victims one, but you might not have permissions for this).
Note that you need to create a python folder and put the libraries in there to override /opt/python/boto3. Also, the layer needs to be λλ€μμ μ¬μ©λλ νμ΄μ¬ λ²μ κ³Ό νΈνλμ΄μΌ νλ©°, if you upload it to your account, it needs to be in the κ°μ μ§μ:
μ΄μ μ λ‘λλ λλ€ λ μ΄μ΄λ₯Ό λͺ¨λ κ³μ μμ μ κ·Ό κ°λ₯νκ² λ§λμΈμ:
κ·Έλ¦¬κ³ νΌν΄μμ λλ€ ν¨μμ λλ€ λ μ΄μ΄λ₯Ό μ°κ²°ν©λλ€:
λ€μ λ¨κ³λ ν¨μλ₯Ό νΈμΆν μ μλ€λ©΄ μ§μ νΈμΆνκ±°λ, μΌλ°μ μΈ λ°©λ²μΌλ‘ νΈμΆλ λκΉμ§ κΈ°λ€λ¦¬λ κ²μ λλ€. νμκ° λ μμ ν λ°©λ²μ λλ€.
μ΄ μ·¨μ½μ μ μ΄μ©νλ λ μλ°ν λ°©λ²μ λ€μμμ μ°Ύμ μ μμ΅λλ€:
μ μ¬μ μν₯: μ¬μ©λ lambda μλΉμ€ μν λ‘μ μ§μ μ μΈ κΆν μμΉ.
iam:PassRole
, lambda:CreateFunction
, lambda:CreateFunctionUrlConfig
, lambda:InvokeFunctionUrl
μ΄ κΆνμΌλ‘ ν¨μλ₯Ό μμ±νκ³ URLμ νΈμΆνμ¬ μ€νν μ μμμ§λ λͺ¨λ¦ λλ€... νμ§λ§ μ κ° ν μ€νΈν λ°©λ²μ μ°Ύμ§ λͺ»νμΌλ, μ°ΎμΌμλ©΄ μλ €μ£ΌμΈμ!
μΌλΆ λλ€λ μ¬μ©μλ‘λΆν° 맀κ°λ³μλ‘ λ―Όκ°ν μ 보λ₯Ό λ°μ κ²μ λλ€. κ·Έ μ€ νλμμ RCEλ₯Ό μ»μΌλ©΄, λ€λ₯Έ μ¬μ©μκ° λ³΄λ΄λ μ 보λ₯Ό μ μΆν μ μμ΅λλ€. νμΈν΄ 보μΈμ:
AWS ν΄νΉ λ°°μ°κ³ μ°μ΅νκΈ°:HackTricks Training AWS Red Team Expert (ARTE) GCP ν΄νΉ λ°°μ°κ³ μ°μ΅νκΈ°: HackTricks Training GCP Red Team Expert (GRTE)