Retour au blog
Sécurité6 min

OWASP A08:2021 – Défaillances d'Intégrité

Protéger l'intégrité des logiciels et des données contre les altérations.

Équipe Eurinhash

Analyste en Cybersécurité

Qu'est-ce que les Défaillances d'Intégrité ?

La catégorie Software and Data Integrity Failures est nouvelle dans l'OWASP Top 10 2021. Elle concerne les failles liées à l'altération des logiciels, des données, ou des pipelines de déploiement.

Cette catégorie inclut notamment les attaques sur la chaîne d'approvisionnement (supply chain) et les désérialisations non sécurisées.

Exemples Courants de Failles

  1. Désérialisation non fiable : Exécution de code via des objets sérialisés malveillants.
  2. Mises à jour non signées : Déploiement de code sans vérification d'intégrité.
  3. Pipeline CI/CD compromis : Injection de code malveillant dans le processus de build.
  4. Données modifiées en transit : Absence de vérification d'intégrité des données reçues.

Comment se protéger ?

Protégez l'intégrité de votre chaîne logistique :

  • Signatures numériques : Signez vos artefacts et vérifiez les signatures reçues.
  • Vérification des dépendances : Utilisez des registres privés et approuvés.
  • Pipeline sécurisé : Isolez et auditez votre CI/CD.
  • Désérialisation sécurisée : N'acceptez jamais de données sérialisées de sources non fiables.

[!WARNING] La désérialisation de données provenant d'utilisateurs non authentifiés peut conduire à une exécution de code à distance (RCE).

// MAUVAISE PRATIQUE : Désérialisation non sécurisée
const unserialize = require('php-unserialize'); // Exemple conceptuel
 
app.post('/import', (req, res) => {
  const data = req.body.serializedData;
  const obj = unserialize(data); // L'attaquant peut injecter du code
  res.json(obj);
});
 
// BONNE PRATIQUE : Utiliser des formats sécurisés (JSON)
app.post('/import', (req, res) => {
  const data = req.body.jsonData;
  
  try {
    const obj = JSON.parse(data); // JSON est plus sûr
    // Valider la structure avec un schéma
    if (!isValidSchema(obj)) {
      return res.status(400).json({ error: 'Format invalide' });
    }
    res.json(obj);
  } catch (e) {
    res.status(400).json({ error: 'JSON mal formé' });
  }
});

Vérification d'Intégrité avec Hash

# Générer un hash SHA-256 d'un fichier
sha256sum application.zip
 
# Vérifier l'intégrité
sha256sum -c checksums.txt
 
# Signer un artefact avec GPG
gpg --sign application.zip
 
# Vérifier la signature
gpg --verify application.zip.sig

Restez en veille

Inscrivez-vous pour recevoir nos prochaines analyses techniques directement dans votre terminal.