48 nouvelles IP de webhook GitHub : la signature reste indispensable

Dev
Vues 3

Une pull request s’ouvre, mais le robot de déploiement reste silencieux. La requête est peut-être bloquée par le pare-feu avant même d’atteindre l’application. L’annonce GitHub du 29 octobre concerne ce trajet entrant.

Trois plages supplémentaires côté réception

Les nouveaux CIDR sont 9.234.98.160/28, 9.234.98.176/28 et 9.234.106.48/28. Ils concernent les webhooks de github.com pour toutes les offres, dont GitHub Enterprise Cloud. Ajoutez-les aux plages existantes d’une liste statique sans remplacer celles-ci.

Chaque /28 comprend 16 adresses, soit 48 au total. L’illustration présente un véritable calcul local avec ipaddress de Python, pas un nombre de comptes ou de serveurs. GitHub indique qu’aucune modification supplémentaire n’est nécessaire si la liste est déjà actualisée via hooks dans GET /meta.

Visualisation originale d’un calcul Python exécuté : trois préfixes /28 contiennent 48 adresses.
Visualisation originale d’un calcul Python exécuté : trois préfixes /28 contiennent 48 adresses.

L’adresse IP et la signature répondent à deux questions

La liste autorise certaines sources réseau à joindre le récepteur. Utilisez hooks, et non actions qui décrit un autre trajet des runners. Un service recevant des événements et un job CI appelant une API externe n’empruntent pas le même sens de circulation.

Vérifiez ensuite X-Hub-Signature-256 avec le secret du webhook. GitHub calcule un HMAC-SHA256 à partir du secret et du corps. Recalculez-le sur les octets originaux et comparez en temps constant, avec hmac.compare_digest ou crypto.timingSafeEqual. Une IP autorisée ne remplace pas cette vérification.

Un JSON équivalent peut changer d’octets

Resérialiser {"action":"opened"} en {"action": "opened"} ajoute un espace. Le sens reste le même, mais la signature peut différer. Notre exemple local utilise un secret public de démonstration : True pour les mêmes octets, False après ajout de l’espace. Ce n’est pas une livraison GitHub capturée.

Exemple HMAC exécuté localement avec un secret public de démonstration : un espace modifie les octets. Aucune livraison réelle capturée.
Exemple HMAC exécuté localement avec un secret public de démonstration : un espace modifie les octets. Aucune livraison réelle capturée.

Conservez le corps brut avant toute transformation et examinez les changements éventuels du proxy ou du framework. Placer le secret dans l’URL du payload créerait un autre risque de divulgation. Gardez-le dans une configuration serveur sécurisée.

Reprendre une livraison sans répéter le travail terminé

Après réparation du réseau, examinez les livraisons échouées et relancez celles qui le nécessitent. X-GitHub-Delivery reste identique lors d’une nouvelle livraison demandée. Distinguez les traitements terminés des échecs reprenables : rejeter tout identifiant déjà vu peut bloquer la reprise.

GitHub recommande une réponse 2XX sous dix secondes et une file pour les traitements longs. Reliez vérification, réception durable et état de traitement réessayable. Les trois CIDR prennent alors leur place dans un parcours allant de l’arrivée à l’achèvement.

Sources et lectures complémentaires

GitHub Changelog · 2026-10-29

GitHub Docs · Meta API

GitHub Docs · Webhook signatures

GitHub Docs · Webhook best practices