Sécurité Laravel : Utilisez Timebox pour contrer les attaques par timing

30 mai 2025 2 min
Les attaques par timing exploitent des écarts infimes dans le temps d'exécution pour voler des informations sensibles. Avec la classe Timebox, Laravel propose une solution élégante : garantir un temps d’exécution constant, même pour des opérations ultra-rapides.

Laravel regorge de petites fonctionnalités qui passent parfois inaperçues. Parmi elles, la classe Timebox mérite toute notre attention, surtout pour ceux qui souhaitent renforcer la sécurité de leurs applications face aux attaques par timing.

Le problème des attaques par timing

Les attaques par timing exploitent les différences, même infimes, dans les temps d’exécution de votre code pour en déduire des informations sensibles. Cela peut concerner, par exemple, la validation des identifiants utilisateur : si une requête valide est traitée plus rapidement ou plus lentement qu’une autre, un attaquant patient et bien équipé pourrait en tirer parti.

Un type d’attaque particulièrement sophistiqué est le Timeless Timing Attack, qui utilise le multiplexage HTTP/2 pour envoyer plusieurs requêtes simultanément. Cela permet de comparer précisément les temps de réponse, indépendamment de la qualité du réseau ou des limitations habituelles (comme la limite de tentatives).

La solution : la classe Timebox

En septembre 2022, grâce à un travail remarquable de Jens Just Iversen (Ephort), Laravel a introduit la classe Illuminate\\Support\\Timebox. Cette classe permet de garantir qu’une opération sensible prendra toujours au moins un certain temps défini, peu importe sa durée d’exécution réelle.

Le principe est simple :

  • Vous passez un callback (la fonction contenant votre opération sensible) et une durée minimale d’exécution (en microsecondes).
  • Si votre opération s’exécute plus rapidement que cette durée minimale, Timebox attend le temps restant avant de renvoyer la réponse.
  • Résultat : les temps d’exécution restent constants et rendent l’attaque par timing beaucoup plus difficile.

Exemple d’utilisation

Voici comment utiliser Timebox dans votre code :

(new Timebox)
    ->call(function (Timebox $timebox) {

        // Placez ici votre opération sensible

    }, $minimumExecutionTime);

Un cas concret est la protection des identifiants lors de la connexion. Voici comment Laravel l’applique :

protected function hasValidCredentials($user, $credentials)
{
    return $this->timebox
        ->call(function ($timebox) use ($user, $credentials) {
            $validated = ! is_null($user)
                && $this->provider->validateCredentials($user, $credentials);

            if ($validated) {
                $timebox->returnEarly();
                $this->fireValidatedEvent($user);
            }

            return $validated;
        }, 200 * 1000);
}

Dans cet exemple, Laravel garantit un temps d’exécution minimal de 200 millisecondes, même si la validation est rapide. L’attaquant, de son côté, ne peut donc plus exploiter la différence de durée pour affiner ses attaques.

Un outil simple, une défense précieuse

La classe Timebox n’est pas encore documentée officiellement, mais elle est facile à comprendre et à intégrer. Si vous développez votre propre système d’authentification ou gérez des zones sensibles dans votre application, c’est une solution à envisager sérieusement pour ajouter une couche supplémentaire de sécurité.

Merci de votre lecture 😎

Ecrit par
Alyson Paya

Partager l'article :

Vous avez un projet ?

Un site vitrine ? e-commerce ? une application ?

Contactez-nous

Découvrez les derniers articles

Tout voir