Warum sind Sie hier?
Lassen Sie uns keine Zeit verschwenden. Sie sind hier, weil Sie eine Webhook-Funktion in Ihre App einbauen wollen. Leider gibt es eine ganze Reihe von Dingen, die aus der Sicherheitsperspektive schief gehen können. Dieser Artikel soll sicherstellen, dass Sie bei der Erstellung von Webhooks keine bekannten Fehler machen.
Wie funktionieren Webhooks?
Um es kurz zu machen: Webhooks sind HTTP(S)-Anfragen an Dritte, um sie über ein Ereignis in Ihrer Anwendung zu informieren. Wenn Sie beispielsweise eine Anwendung anbieten, die Rechnungen erstellt, könnten Sie Ihren Kunden die Möglichkeit bieten, eine Webhook-Funktion einzurichten, die ausgelöst wird, wenn eine neue Rechnung erstellt wird. Das bedeutet, dass Ihre Anwendung bei der Erstellung der Rechnung eine HTTP(S)-Anfrage an eine vom Benutzer festgelegte Stelle sendet. Der Benutzer kann dies nutzen, um seine eigenen benutzerdefinierten Workflows einzurichten, die durch den Webhook ausgelöst werden, z. B. die Planung von Erinnerungs-E-Mails oder das Senden einer Nachricht an den Kunden auf Slack.
Checkliste: Sicherung von Webhook-Implementierungen
1. Abwehr von Angriffen vom Typ SSRF
Bei dieser Art von Angriff versucht der Angreifer, Informationen (z. B. Instanz-Metadaten in einer Cloud) zu erhalten, indem er die Webhook-Funktion ausnutzt. Um sich dagegen zu wehren, sollten Sie die folgenden Maßnahmen ergreifen.
✅ Benutzereingaben validieren
- Basic: Einfache URL-Validierung durchführen.
- Besser: Sicherstellen, dass die URL mit "https://" beginnt, "file://" und andere Nicht-HTTPS-Schemata nicht zulassen.
✅ Lokale Adressen einschränken
- Blockieren Sie typische lokale IPs: 127.0.x, 192.168.x, 172.x.
- Verbot von "localhost" und "http://"
✅ Grenzwert der Log-Exposition
- Nur HTTP-Statuscodes in benutzerseitigen Protokollen anzeigen.
- Vermeiden Sie die Anzeige von Kopfzeilen oder Textinhalten.
✅ Erweitert: Verbesserte URL-Validierung
- Für POST-Anfragen einen spezifischen Antwort-Header verlangen, der nur für den Kunden gilt.
- Führen Sie diese Überprüfung kontinuierlich durch, auch nach der Ersteinrichtung, um DNS-Änderungen zu verhindern.

2. Ermöglichen Sie Ihren Nutzern, die Authentizität der Daten zu überprüfen
Ihr Webhook-Kunde muss wissen, dass die Daten wirklich von Ihrer Anwendung stammen. Sie können eine der folgenden Methoden verwenden.
✅ Überprüfung der Testmeldung
Ermöglichen Sie es den Benutzern zunächst, eine Testmeldung auszulösen, um die Sicherheitsmechanismen zu testen.
✅ HMAC-Überprüfungshash
Einer der wirksamsten Sicherheitsmechanismen für Webhook-Funktionen ist die Implementierung von HMAC für Datenintegrität und Authentizität.
Der grundlegende Prozess lässt sich wie folgt zusammenfassen:
- Generieren Sie einen Hash der Nutzdaten mit SHA-256 und einem geheimen Schlüssel.
- Senden Sie den HMAC mit der Nutzlast.
- Die Empfänger erstellen den Hash neu, um die Authentizität und Integrität der Nutzdaten zu überprüfen.
✅ Einbeziehung des Zeitstempels
Hierbei handelt es sich eher um eine fortgeschrittene Sicherheitsmaßnahme. Hinzufügen eines Zeitstempels zur Nutzlast, um Replay-Angriffe zu verhindern. Stellt sicher, dass Nachrichten nicht wiederverwendet oder verändert werden.
✅ Client-seitige TLS-Zertifikate
Authentifizierung von HTTP-Aufrufen mit client-seitigen TLS-Zertifikaten. Dies ist besonders für Kunden auf Unternehmensebene interessant.
3. Ratenbegrenzung und Vermeidung von Datenüberschneidungen
Für die Sicherheit von Webhooks ist es sicherer, zu wenig Daten zu senden, als zu viele anzuhängen. Obwohl Webhook-Aufrufe mit HTTPS verschlüsselt werden sollten, kann man nie wissen, wer nach ein paar Jahren noch die Kontrolle über einen Domänennamen haben könnte.
✅ Datenexposition minimieren
- Vermeiden Sie es, personenbezogene Informationen (PII) oder sensible Daten zu versenden.
- Anstatt mehrere Datenpunkte (wie contact_id, email, name) zu senden, senden Sie nur die contact_id. Lassen Sie die Nutzer bei Bedarf weitere Daten über Ihre öffentliche API abrufen.
✅ Kommunikation der Wiederholungsrichtlinie
- Teilen Sie den Nutzern die Wiederholungsrichtlinien und Ratenbeschränkungen klar mit.
- Informieren Sie sie darüber, dass die Nachrichten aufgrund von Wiederholungsversuchen möglicherweise nicht in der richtigen Reihenfolge ankommen.
- Definieren Sie, dass jede 2xx-Antwort ein Erfolg ist; andere Antworten sollten einen erneuten Versuch auslösen.
✅ Verwendung eines Warteschlangensystems für die Zustellung
Implementieren Sie ein Warteschlangensystem, um die Webhook-Zustellung zu verwalten und die Ausgabe zu drosseln. Auf diese Weise können Sie verhindern, dass die Server Ihrer Benutzer in Grenzfällen überlastet werden, z. B. wenn ein umfangreicher CSV-Import übermäßige Webhook-Aufrufe und Wiederholungen auslöst.
4. Bonus: Alarmierung bei Anomalien
Dies dient eher der Bequemlichkeit der Entwickler als der Sicherheit, ist aber dennoch eine gute Sache.
- Benachrichtigung der Benutzer beim Auftreten von 4xx- und 5xx-Antworten
- Benachrichtigungen senden, um die Nutzer über etwaige Fehler zu informieren
Dieser Zusatz verbessert die Transparenz und Reaktionsfähigkeit Ihres Webhook-Systems.
Schlussfolgerung
Und das war's schon! Wir haben einige Schritte beschrieben, um Ihre Webhooks nicht nur funktional, sondern auch sicher und benutzerfreundlich zu machen. Die Umsetzung dieser Schritte wird Ihre Anwendung schützen und auch die allgemeine Benutzererfahrung verbessern. Viel Spaß beim Kodieren! 🚀🔒👨💻
Aikido Security ist eine auf Entwickler ausgerichtete Software-Sicherheitsplattform. Wir helfen Ihnen, Ihr Produkt sicher zu machen, damit Sie sich auf das Schreiben von Code konzentrieren können. Sie müssennicht mit einem Vertriebsteam sprechen - verbinden Sie einfach Ihr GitHub-, GitLab-, Bitbucket- oder Azure DevOps-Konto an, um Ihre Repos kostenlos zu scannen.