Explorer
KNOW-ANT-008

Anti-Pattern : Génération de tokens de téléchargement sans restriction

Domaine
cybersecu
Type
anti-pattern
Priorité
P2

Parent : [[INDEX-CYBERSECU]]

Anti-Pattern : Génération de tokens de téléchargement sans restriction

Description

Générer des liens de téléchargement directs avec des tokens sans rate limiting, sans expiration courte, sans limite de downloads, sans binding IP, et sans audit log. Cela permet le partage massif de liens, le scraping de fichiers, et la fuite de contenu protégé.

Exemple réel - Archive Ygg

// downloadController.js — Archive Ygg (AVEC FAILLES)
exports.generateLink = async (req, res) => {
  const { torrentId, fileId } = req.body;

  // Pas de rate limiting
  // Pas de vérification de quota
  
  const token = nanoid(32);
  const expiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000); // 24h (trop long)

  await db.insert(
    `INSERT INTO downloads (...) VALUES (?, ?, ?, ?, ?, ?, 0, NOW())`,
    [uuidv4(), req.session.userId, torrentId, fileId, token, expiresAt]
  );

  // Expose le token complet dans le HTML
  res.render('downloads/link', { 
    link: `${req.protocol}://${req.get('host')}/downloads/${token}`
  });
};

// Route publique SANS protection
exports.download = async (req, res) => {
  const { token } = req.params;

  const download = await db.queryOne(
    `SELECT d.*, f.path as file_path FROM downloads d 
     LEFT JOIN files f ON d.file_id = f.id 
     WHERE d.token = ?`, [token]
  );

  // Pas de rate limiting
  // Pas de vérification IP
  // Pas de limite de downloads
  // Pas de watermark

  res.download(filePath);
};

Conséquences

  • Partage massif : Un lien partagé = accès illimité pendant 24h
  • Scraping : Un attaquant génère des milliers de liens pour récupérer tous les fichiers
  • Fuite de contenu : Les liens circulent sur des forums/discord
  • Perte de revenus : Contenu payant accessible gratuitement
  • DDoS par downloads : Téléchargements massifs depuis un seul token

Quand c'est acceptable

JAMAIS pour du contenu protégé. Acceptable uniquement pour des fichiers publics avec rate limiting.

Solution

Utiliser le pattern KNOW-PAT-058 — Tokens de téléchargement sécurisés avec :

  • Rate limiting (max 10 générations/heure)
  • Expiration courte (1-4h pour contenu sensible)
  • Limite de downloads (max 3 par token)
  • IP binding optionnel
  • Watermarking
  • Audit log complet

Références

  • Archive Ygg : 01_SOURCE_CODE/02g_debrideur/controllers/downloadController.js
  • OWASP : Insecure Direct Object References