So lassen sich SSRF-Schwachstellen in Go mindern
10. Dezember 2024
0 Min. LesezeitDie Absicherung von HTTP-Anfragen ist bei der Entwicklung von Go-Anwendungen entscheidend, um Schwachstellen wie Server-Side Request Forgery (SSRF) zu verhindern. Bei SSRF manipuliert ein Angreifer einen Server, damit dieser unbeabsichtigte Anfragen sendet und möglicherweise auf interne Dienste oder vertrauliche Daten zugreift.
Wir zeigen, wie Sie HTTP-Anfragen mithilfe von URL-Parsing und Validierung absichern können, und stellen Beispielcode vor, der den HTTP-GET-Anfrage-Handler http.Get robuster macht.
Der Code des HTTP-Routen-Handlers, der HTTP-Anfragen an die eigene Domain eines Benutzers sendet, um ein Bild abzurufen, sieht wie folgt aus (der Kürze halber gekürzt). Er befindet sich in einer Funktion namens downloadAndResize:
SSRF-Schwachstellen in Go-Code mindern
Um SSRF-Schwachstellen in Go-Anwendungen zu mindern, sollten Entwickler Eingaben validieren und bereinigen. Außerdem sollten sie wissen, wie sich URLs sicher so erstellen lassen, dass die resultierende Domain nicht manipuliert werden kann.
SSRF-Angriffe nutzen häufig eine unzureichende Eingabevalidierung aus. Dadurch können Angreifer URLs manipulieren und Anfragen an unbeabsichtigte Ziele umleiten. Mit einer robusten Validierung und Bereinigung von Eingaben können Entwickler das Risiko von SSRF-Angriffen deutlich senken.
Eingabevalidierung für tenantID und fileID implementieren
In unserer anfälligen Go-Anwendung werden tenantID und fileID ohne Validierung aus der Abfragezeichenfolge extrahiert. Diese fehlende Validierung öffnet SSRF-Angriffen Tür und Tor.
Sehen wir uns den folgenden Go-Code an, der Eingaben validiert, um sicherzustellen, dass diese Parameter gefahrlos verwendet werden können:
Warum ausgehende Anfragen auf vertrauenswürdige Hosts beschränkt werden sollten
Eine weitere wirksame Strategie zur Minderung von SSRF-Schwachstellen besteht darin, ausgehende Anfragen auf vertrauenswürdige Hosts zu beschränken. Dazu können Sie eine Positivliste zulässiger Hosts führen und überprüfen, ob der Zielhost jeder Anfrage darauf steht.
So können Sie die Host-Beschränkung in der Funktion downloadAndResize implementieren:
Mit Beschränkungen auf zulässige Hosts als Sicherheitsmaßnahme stellen wir sicher, dass die Go-Anwendung HTTP-Anfragen nur an eine festgelegte Liste vordefinierter, vertrauenswürdiger Hosts sendet. Dadurch sinkt die Auswirkung eines SSRF-Angriffs weiter.
Warum eine sicherheitsorientierte Denkweise bei der Entwicklung wichtig ist
Eine sicherheitsorientierte Denkweise ist entscheidend, damit Entwickler robuste und sichere Anwendungen erstellen – auch in Go. Dazu gehört, Sicherheitsaspekte in jede Phase des Softwareentwicklungslebenszyklus einzubeziehen, vom Entwurf bis zur Bereitstellung.
Wenn Entwickler der Sicherheit Priorität einräumen, können sie:
das Risiko von Sicherheitsverletzungen und Datenlecks senken.
Benutzerdaten schützen und Vertrauen bewahren.
Branchenvorschriften und -standards einhalten.
Kosten und Auswirkungen von Sicherheitsvorfällen minimieren.
Wenn Entwickler diese Best Practices befolgen und Ressourcen wie den Go-Sicherheits-Spickzettel nutzen, können sie die Sicherheit ihrer Go-Anwendungen verbessern und sich gegen Bedrohungen wie SSRF wappnen.
Snyk Code für mehr Sicherheit nutzen
Wir haben erfahren, wie Sie sich vor SSRF-Schwachstellen schützen können und warum Entwickler Benutzereingaben validieren und bereinigen, ausgehende Anfragen auf vertrauenswürdige Hosts beschränken und Positivlisten verwenden sollten, um den Zugriff auf Domains zu steuern. Außerdem können Sicherheitstools wie Snyk Code dabei helfen, solche Schwachstellen früh im Entwicklungsprozess zu finden und zu beheben.
Um die Sicherheit Ihrer Anwendung weiter zu verbessern, können Sie Snyk Code für statische Analysen einsetzen. Snyk Code kann SSRF-Schwachstellen und weitere Sicherheitsprobleme in Ihrem Go-Code vor der Bereitstellung erkennen. Wenn Sie Snyk in Ihre IDE oder Ihr Repository integrieren, können Sie Schwachstellen frühzeitig finden und dafür sorgen, dass Ihre Anwendung sicher bleibt.
Weitere Best Practices für Go-Sicherheit finden Sie im Go-Sicherheits-Spickzettel. Außerdem erfahren Sie, wie Sie Ihre Anwendungen mit Docker sicher containerisieren.
Mit diesen Techniken und Tools wie Snyk können Sie Ihre Go-Anwendungen vor SSRF-Angriffen und anderen Sicherheitsbedrohungen schützen.
Lässt sich Snyk auch mit anderen Programmiersprachen verwenden?
Snyk unterstützt zahlreiche Programmiersprachen und ist damit ein unverzichtbares Tool für Entwickler, die mit unterschiedlichen Technologie-Stacks arbeiten. Ganz gleich, ob Sie mit JavaScript, Python, Java, Ruby, PHP oder anderen Programmiersprachen entwickeln: Snyk bietet umfassende, auf das jeweilige Ökosystem zugeschnittene Sicherheitslösungen.
Dazu gehören:
JavaScript und TypeScript: Mit Snyk können Sie Ihre Node.js-Anwendungen auf Schwachstellen im Code und in Abhängigkeiten untersuchen.
Python: Snyk hilft dabei, Schwachstellen in Python-Paketen zu erkennen und konkrete Empfehlungen zu ihrer Behebung zu geben.
Java: Dank der Integration von Snyk mit Maven und Gradle können Java-Entwickler ihre Anwendungen absichern, indem sie Schwachstellen in Abhängigkeiten erkennen und beheben.
Ruby: Ruby-Entwickler können mit Snyk ihre Gemfiles und Gemfile.lock-Dateien auf bekannte Schwachstellen untersuchen.
PHP: Snyk unterstützt Composer. So können PHP-Entwickler ihre Projekte absichern, indem sie Schwachstellen in Abhängigkeiten erkennen.
Gestalten Sie mit Snyk die Zukunft von Coding-Assistenten
Erfahren Sie mehr über Coding-Assistenten und wie Sie diese Tools in Entwicklungs-Workflows integrieren.


