SUMMARY
We have identified and verified an SSRF vulnerability where webhook
URLs are not validated, allowing repository administrators to create
webhooks targeting internal services, private networks, and cloud
metadata endpoints.
AFFECTED COMPONENTS (VERIFIED)
- Webhook Creation (pkg/ssh/cmd/webhooks.go:125)
- Backend CreateWebhook (pkg/backend/webhooks.go:17)
- Backend UpdateWebhook (pkg/backend/webhooks.go:122)
- Webhook Delivery (pkg/webhook/webhook.go:97)
IMPACT
This vulnerability allows repository administrators to perform SSRF
attacks, potentially enabling:
a) Cloud Metadata Theft - Access AWS/Azure/GCP credentials via
169.254.169.254
b) Internal Network Access - Target localhost and private networks
(10.x, 192.168.x, 172.16.x)
c) Port Scanning - Enumerate internal services via response codes and
timing
d) Data Exfiltration - Full HTTP responses stored in webhook delivery
logs
e) Internal API Access - Call internal admin panels and Kubernetes
endpoints
PROOF OF CONCEPT
Simple example demonstrating localhost access:
ssh localhost webhook create my-repo http://127.0.0.1:8080/internal \
--events push --active
then push to trigger.
SUMMARY
We have identified and verified an SSRF vulnerability where webhook
URLs are not validated, allowing repository administrators to create
webhooks targeting internal services, private networks, and cloud
metadata endpoints.
AFFECTED COMPONENTS (VERIFIED)
IMPACT
This vulnerability allows repository administrators to perform SSRF
attacks, potentially enabling:
a) Cloud Metadata Theft - Access AWS/Azure/GCP credentials via
169.254.169.254
b) Internal Network Access - Target localhost and private networks
(10.x, 192.168.x, 172.16.x)
c) Port Scanning - Enumerate internal services via response codes and
timing
d) Data Exfiltration - Full HTTP responses stored in webhook delivery
logs
e) Internal API Access - Call internal admin panels and Kubernetes
endpoints
PROOF OF CONCEPT
Simple example demonstrating localhost access:
ssh localhost webhook create my-repo http://127.0.0.1:8080/internal \ --events push --activethen push to trigger.