
AWS Organization-weites Erkennungs-Toolkit für CVE-2025-55182 & CVE-2025-66478 (React Server Components / Next.js RCE-Schwachstellen)
AWS-Organisationsweites Erkennungs-Toolkit für CVE-2025-55182 und CVE-2025-66478
⚠️ WICHTIGER HINWEIS – BITTE VOR DER VERWENDUNG LESEN
Dieses Toolkit wurde NICHT in einer Produktions-AWS-Umgebung getestet.
Aufgrund von Infrastruktureinschränkungen wurde dieses Projekt nur durch Code-Review, statische Analyse und Dokumentationsprüfung entwickelt und validiert. Es wurde nicht in einer Live-AWS-Umgebung mit aktiven GuardDuty-, WAF-, EventBridge- oder CloudTrail-Diensten bereitgestellt oder getestet.
Was das für Sie bedeutet:
| Komponente | Status |
|---|
| Python-Scanner-Logik | ✅ Code überprüft, Snyk validiert |
| Terraform-Syntax | ✅ Validier, nicht angewendet |
| IAM-Richtlinien | ⚠️ Möglicherweise Anpassungen für Ihre Umgebung erforderlich |
| EventBridge-Regeln | ⚠️ Muster basieren auf AWS-Dokumentation |
| WAF-Regeln | ⚠️ Regex-Muster nicht mit Live-Traffic getestet |
| Athena-Abfragen | ⚠️ Schema-Annahmen müssen möglicherweise geändert werden |
terraform plan ausführen und vor der Anwendung prüfenDiese Software wird "WIE BESEHEN" ohne jegliche Gewährleistung bereitgestellt. Die Autoren übernehmen keine Verantwortung für Schäden, Sicherheitsvorfälle oder AWS-Kosten, die durch die Nutzung dieses Toolkits entstehen. Nutzung auf eigenes Risiko.
Wenn Sie dieses Toolkit erfolgreich bereitstellen und testen, ziehen Sie bitte in Betracht, Ihre Erkenntnisse zur Verbesserung der Community beizutragen.
Ein umfassendes Sicherheits-Toolkit zur Erkennung von React2Shell-Ausnutzungsversuchen in AWS-Umgebungen. Dieses Toolkit bietet Echtzeiterkennung, Bedrohungsjagd-Funktionen und automatisierte Reaktion auf die kritische RCE-Sicherheitslücke in React Server Components.
__proto__:then-Manipulation ermöglicht die Ausführung beliebigen Codes über process.mainModule.require('child_process').execSync()---
## Voraussetzungen
### Erforderliche Berechtigungen```
# Minimum IAM permissions for the detection script
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"cloudtrail:LookupEvents",
"logs:StartQuery",
"logs:GetQueryResults",
"guardduty:ListDetectors",
"guardduty:ListFindings",
"guardduty:GetFindings",
"guardduty:CreateThreatIntelSet",
"guardduty:UpdateThreatIntelSet",
"guardduty:ListThreatIntelSets",
"guardduty:GetThreatIntelSet",
"s3:PutObject",
"s3:GetObject",
"sts:GetCallerIdentity",
"sts:AssumeRole"
],
"Resource": "*"
}
]
}
# For Security Hub integration, add:
"securityhub:BatchImportFindings"
# For SNS alerting, add:
"sns:Publish"
# For organization-wide scanning, add:
"organizations:ListAccounts"
| Software | Version | Zweck |
|---|---|---|
| Python | 3.9+ | Laufzeitumgebung für Erkennungsskripte |
| Terraform | 1.0+ | Infrastrukturbereitstellung |
| AWS CLI | 2.x | AWS-Authentifizierung |
| boto3 | 1.34+ | AWS SDK für Python |
cd React2Shell_Hunter
python3 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
### Schritt 2: AWS-Anmeldeinformationen konfigurieren```bash
# Option A: Use AWS CLI profile
aws configure --profile security-scanner
# Option B: Export environment variables
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
export AWS_DEFAULT_REGION="us-east-1"
# Option C: Use IAM role (recommended for EC2/Lambda)
# Attach appropriate IAM role to your compute resource
aws sts get-caller-identity
python -c "import boto3, yaml; print('Dependencies OK')"
python -c " import yaml with open('config/iocs.yaml') as f: iocs = yaml.safe_load(f) print(f'Loaded {len(iocs["network_iocs"]["malicious_ips"])} malicious IPs') "
---
## Schnellstart
### Aktuelles Konto scannen (letzte 24 Stunden)```bash
python src/react2shell_detector.py --hours 24
Erwartete Ausgabe:``` 2025-12-06 10:00:00 - React2ShellDetector - INFO - ============================================================ 2025-12-06 10:00:00 - React2ShellDetector - INFO - React2Shell IOC Detection Script 2025-12-06 10:00:00 - React2ShellDetector - INFO - CVE-2025-55182 & CVE-2025-66478 2025-12-06 10:00:00 - React2ShellDetector - INFO - ============================================================ 2025-12-06 10:00:00 - React2ShellDetector - INFO - Starting single account scan... 2025-12-06 10:00:00 - React2ShellDetector - INFO - Analyzing CloudTrail logs... 2025-12-06 10:00:05 - React2ShellDetector - INFO - Checking GuardDuty findings...
Total findings: 0 CRITICAL: 0 HIGH: 0 MEDIUM: 0
### Vollständiger Produktionsscan```bash
python src/react2shell_detector.py \
--organization \
--role-name SecurityAuditRole \
--security-hub \
--guardduty-bucket my-threat-intel-bucket-12345 \
--vpc-log-group /aws/vpc/flowlogs \
--waf-log-group aws-waf-logs-react2shell \
--sns-topic arn:aws:sns:us-east-1:123456789012:security-alerts \
--output json \
--output-file findings-$(date +%Y%m%d).json \
--hours 72
SIE KÖNNEN IN GUARDDUTY KEINE BENUTZERDEFINIERTEN ERKENNUNGSREGELN ERSTELLEN.
GuardDuty nutzt ML-Modelle und Bedrohungsinformationen, um Ergebnisse zu generieren. So erkennen Sie React2Shell:
MaliciousIPCaller.Custom-Ergebnisse### EventBridge-Regelpatterns
Das Terraform erstellt 7 spezifische EventBridge-Regeln:
| Regel | Erkennungstyp-Muster | Schweregrad |
|-------|----------------------|-------------|
| `react2shell-malicious-ip-caller` | `MaliciousIPCaller.Custom` | CRITICAL |
| `react2shell-credential-exfiltration` | `InstanceCredentialExfiltration.*` | CRITICAL |
| `react2shell-dns-exfiltration` | `DNSDataExfiltration` | HIGH |
| `react2shell-cryptocurrency-mining` | `CryptoCurrency:*` | HIGH |
| `react2shell-unusual-network-ports` | `NetworkPortUnusual` | MEDIUM |
| `react2shell-malicious-domain` | `MaliciousDomainRequest.*` | HIGH |
| `react2shell-high-severity-catchall` | Severity >= 7 | VARIES |
### WAF-Schutzebenen
Die WAF WebACL implementiert 9 Regeln in Prioritätsreihenfolge:
| Priorität | Regel | Aktion | Erkennung |
|-----------|-------|--------|-----------|
| 1 | Bösartige IPs blockieren | BLOCK | Verbindungen von 9 bekannten C2-IPs |
| 2 | Next-Action-Header-Werte | BLOCK | `next-action`-Header, der `$ACTION` ODER `__proto__`-Muster enthält |
| 3 | RSC-Action-ID-Header-Werte | BLOCK | `rsc-action-id`-Header, der `$ACTION` ODER `__proto__`-Muster enthält |
| 4 | Prototype Pollution | BLOCK | `__proto__` oder `constructor.prototype` im Body |
| 5 | RCE-Muster | BLOCK | `process.mainModule.require`, `child_process`, `execSync` |
| 6 | ACTION-Parameter | BLOCK | `$ACTION_0:0` oder `$ACTION_REF` im POST-Body |
| 7 | Verdächtige User-Agents | COUNT | `Go-http-client`, `Assetnote`, `python-requests` |
| 8 | AWS bekannte schädliche Eingaben | INHERIT | AWS verwaltete Regelgruppe |
| 9 | AWS allgemeines Regelset | INHERIT | AWS verwaltete Regelgruppe |
> **Hinweis**: Die Regeln 2 & 3 verwenden `or_statement` mit mehreren `byte_match_statement`-Prüfungen, um bösartige Header-WERTE zu erkennen (nicht nur die Anwesenheit des Headers). AWS WAF unterstützt keine regulären Ausdrücke im Header-Matching, daher erfordert jedes Muster eine eigene Anweisung. Header-Namen sind in Kleinbuchstaben, wie von WAF gefordert.
---
## Komponentenreferenz
### Projektstruktur```
React2Shell_Hunter/
├── config/
│ └── iocs.yaml # IOC database (IPs, domains, patterns) - 452 lines
├── src/
│ └── react2shell_detector.py # Main detection script - 1141 lines
├── terraform/
│ ├── guardduty.tf # GuardDuty + ThreatIntelSet + S3 - 405 lines
│ ├── eventbridge_rules.tf # 7 EventBridge rules - 533 lines
│ └── waf_rules.tf # WAF WebACL with 9 rules - 681 lines
├── lambda/
│ └── ioc_scanner/
│ └── handler.py # Real-time Lambda scanner - 381 lines
├── athena_queries/
│ └── detection_queries.sql # 18 threat hunting queries - 483 lines
├── tests/
│ ├── __init__.py # Test package init
│ ├── conftest.py # Pytest fixtures (project_root, ioc_config, etc.)
│ ├── test_ioc_matching.py # IOC pattern validation tests
│ ├── test_terraform.py # Terraform configuration validation
│ └── test_waf_patterns.py # WAF regex pattern tests
├── docs/
│ ├── THREAT_INTELLIGENCE_REPORT.md
│ └── GUARDDUTY_EVENTBRIDGE_SETUP_GUIDE.md
├── requirements.txt # Python dependencies (boto3, pyyaml, pytest, python-hcl2)
├── README.md
└── CLAUDE.md
| Klasse | Zweck | Wichtige Methoden |
|---|---|---|
IOCLoader | IOCs aus YAML laden | get_malicious_ips(), get_suspicious_ports(), get_malicious_domains() |
CloudTrailAnalyzer | API-basierte IOCs erkennen | analyze_recent_events(hours) |
VPCFlowLogAnalyzer | Netzwerk-IOCs erkennen | analyze_flow_logs(log_group, hours) |
GuardDutyManager | Bedrohungsintelligenz verwalten | create_threat_intel_set(bucket), get_relevant_findings(hours) |
WAFLogAnalyzer | HTTP-IOCs erkennen | analyze_waf_logs(log_group, hours) |
OrganizationScanner | Kontenübergreifendes Scannen | scan_organization(hours, role_name) |
SecurityHubReporter | Erkenntnisse importieren | import_findings(findings) |
SNSAlerter | Benachrichtigungen senden | send_alert(findings) |
| Argument | Typ | Standard | Beschreibung |
|---|---|---|---|
--config | string | config/iocs.yaml | Pfad zur IOC-Konfigurationsdatei |
--hours | int | 24 | Stunden der zu analysierenden Logs |
--organization | flag | false | Gesamte AWS-Organisation scannen |
--role-name | string | OrganizationAccountAccessRole | Rolle, die in Mitgliedskonten angenommen werden soll |
--sns-topic | string | keine | SNS-Topic-ARN für Benachrichtigungen |
--security-hub | flag | false | Erkenntnisse in Security Hub importieren |
--guardduty-bucket | string | keine | S3-Bucket für GuardDuty-Bedrohungsintelligenz |
--vpc-log-group | string | keine | CloudWatch-Loggruppe für VPC-Flow-Logs |
--waf-log-group | string | keine | CloudWatch-Loggruppe für WAF-Logs |
--output | enum | text | Ausgabeformat: json, text, csv |
--output-file | string | keine | Pfad zur Ausgabedatei |
--debug | flag | false | Debug-Logging aktivieren |
cd terraform
terraform init
terraform plan
-var="threat_intel_bucket=react2shell-threat-intel-$(aws sts get-caller-identity --query Account --output text)"
-var="enable_guardduty=true"
-var="enable_waf=true"
-var="waf_scope=REGIONAL"
terraform apply
-var="threat_intel_bucket=react2shell-threat-intel-$(aws sts get-caller-identity --query Account --output text)"
**Terraform-Variablen:**
| Variable | Erforderlich | Standard | Beschreibung |
|----------|----------|---------|-------------|
| `threat_intel_bucket` | JA | - | S3-Bucket-Name für Threat-Intel-Dateien |
| `enable_guardduty` | nein | true | GuardDuty-Erkennung aktivieren |
| `enable_waf` | nein | true | WAF WebACL erstellen |
| `waf_scope` | nein | REGIONAL | `REGIONAL` oder `CLOUDFRONT` |
| `block_mode` | nein | BLOCK | `BLOCK` oder `COUNT` |
| `enable_lambda_automation` | nein | false | Lambda für automatisierte Reaktion aktivieren |
### Schritt 2: WAF mit Ressourcen verknüpfen
Die WAF WebACL muss mit Ihren Ressourcen verknüpft werden:```bash
# Associate with ALB
aws wafv2 associate-web-acl \
--web-acl-arn $(terraform output -raw web_acl_arn) \
--resource-arn arn:aws:elasticloadbalancing:us-east-1:123456789012:loadbalancer/app/my-alb/1234567890
# Associate with API Gateway
aws wafv2 associate-web-acl \
--web-acl-arn $(terraform output -raw web_acl_arn) \
--resource-arn arn:aws:apigateway:us-east-1::/restapis/abc123/stages/prod
SNS_TOPIC=$(terraform output -raw sns_topic_arn)
aws sns subscribe
--topic-arn $SNS_TOPIC
--protocol email
--notification-endpoint [email protected]
aws sns subscribe
--topic-arn $SNS_TOPIC
--protocol lambda
--notification-endpoint arn:aws:lambda:us-east-1:123456789012:function:slack-notifier
### Schritt 4: Athena-Tabellen erstellen```bash
# Open Athena console or use AWS CLI
# Run the CREATE TABLE statements from athena_queries/detection_queries.sql
# CloudTrail table
aws athena start-query-execution \
--query-string "CREATE EXTERNAL TABLE cloudtrail_logs ..." \
--work-group primary \
--query-execution-context Database=default
| IP-Adresse | Port | Vertrauenswürdigkeit | Kontext | Quelle |
|---|---|---|---|---|
| 93.123.109.247 | 8000 | HIGH | Primärer C2-Server | Datadog |
| 45.77.33.136 | 8080 | HIGH | Primärer C2-Server | Datadog |
| 194.246.84.13 | 2045 | HIGH | Primärer C2-Server | Datadog |
| 141.11.240.103 | 45178 | HIGH | Primärer C2-Server | Datadog |
| 23.235.188.3 | 652 | HIGH | PowerShell Stager | GreyNoise |
| 46.36.37.85 | 12000 | HIGH | Payload-Staging | GreyNoise |
| 144.202.115.234 | 80 | MEDIUM | Payload-Hosting | Datadog |
| 162.215.170.26 | 3000 | MEDIUM | Sekundäre Nutzlast | GreyNoise |
| 45.32.158.54 | - | MEDIUM | Scanner | GreyNoise |
| Domain | Kategorie | Vertrauenswürdigkeit |
|---|---|---|
| ceye.io | DNS-Exfiltration | HIGH |
| dnslog.cn | DNS-Exfiltration | HIGH |
| *.oastify.com | Burp Collaborator | MEDIUM |
| sapo.shk0x.net | C2 | HIGH |
| xwpoogfunv.zaza.eu.org | C2 | HIGH |
| *.c3pool.com | Cryptomining | HIGH |
| Port | Verwendung |
|---|---|
| 652 | PowerShell-Stager |
| 2045 | Benutzerdefiniertes C2 |
| 8000, 8080 | Alternativer HTTP-C2 |
| 12000, 45178 | Benutzerdefiniertes C2 |
| 3333, 5555, 14433, 14444 | Cryptomining |
| Muster | Schweregrad | Beschreibung |
|---|---|---|
next-action: * | KRITISCH | RSC-Ausnutzungs-Header (Kleinbuchstaben in der WAF) |
rsc-action-id: * | KRITISCH | RSC-Aktionskennung (Kleinbuchstaben in der WAF) |
$ACTION_0:0 | KRITISCH | RSC-Aktionsparameter |
__proto__:then | KRITISCH | Prototyp-Verschmutzung |
process.mainModule.require | KRITISCH | Node.js RCE |
child_process | KRITISCH | Befehlsausführung |
Go-http-client/1.1 | MITTEL | Scanner-Benutzeragent |
aws guardduty list-detectors
aws guardduty create-detector --enable
terraform apply -var="enable_guardduty=true"
#### "Fehler beim Annehmen der Rolle im Mitgliedskonto"```bash
# Verify role exists in target account
aws iam get-role --role-name SecurityAuditRole
# Verify trust policy allows your account
aws iam get-role --role-name SecurityAuditRole --query 'Role.AssumeRolePolicyDocument'
# Test role assumption
aws sts assume-role \
--role-arn arn:aws:iam::TARGET_ACCOUNT:role/SecurityAuditRole \
--role-session-name test
DETECTOR_ID=$(aws guardduty list-detectors --query 'DetectorIds[0]' --output text) aws guardduty list-threat-intel-sets --detector-id $DETECTOR_ID
aws s3api get-bucket-policy --bucket your-threat-intel-bucket
aws s3 cp s3://your-bucket/threat-intel/react2shell-ips.txt -
#### "WAF-Regel blockiert nicht"```bash
# Check if WebACL is associated
aws wafv2 list-resources-for-web-acl \
--web-acl-arn $(terraform output -raw web_acl_arn)
# Check sampled requests
aws wafv2 get-sampled-requests \
--web-acl-arn $(terraform output -raw web_acl_arn) \
--rule-metric-name React2Shell-Malicious-IP-Blocked \
--scope REGIONAL \
--time-window StartTime=2025-12-06T00:00:00Z,EndTime=2025-12-06T23:59:59Z \
--max-items 10
DETECTOR_ID=$(aws guardduty list-detectors --query 'DetectorIds[0]' --output text)
aws guardduty create-sample-findings
--detector-id $DETECTOR_ID
--finding-types "UnauthorizedAccess:IAMUser/MaliciousIPCaller.Custom"
aws cloudwatch get-metric-statistics
--namespace AWS/Events
--metric-name Invocations
--dimensions Name=RuleName,Value=react2shell-malicious-ip-caller
--start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ)
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ)
--period 300
--statistics Sum
---
## FAQ
### F: Ersetzt dies das Patchen?
**NEIN.** Dies ist ein Erkennungs-Toolkit, keine Präventionslösung. Sie MÜSSEN patchen:
- React: 19.0.1, 19.1.2, or 19.2.1
- Next.js: 15.0.5, 15.1.9, 15.2.6, 15.3.6, 15.4.8, 15.5.7, or 16.0.7
### F: Erkennt dies alle React2Shell-Angriffe?
**Keine Erkennung ist 100%ig.** Dieses Toolkit erkennt:
- Verbindungen zu bekannten C2-IPs (wenn Angreifer neue IPs verwenden, erkennt es nicht)
- Bekannte Payload-Muster (wenn Angreifer verschleiern, kann WAF umgangen werden)
- Post-Exploitation-Verhalten (Credential-Diebstahl, laterale Bewegung)
### F: Wie oft sollte ich den Scanner ausführen?
Empfohlener Zeitplan:
- **Kontinuierlich**: GuardDuty + EventBridge (Echtzeit)
- **Stündlich**: Python-Skript mit `--hours 1`
- **Täglich**: Vollständige Athena-Bedrohungsjagdabfragen
### F: Wie füge ich neue IOCs hinzu?
Bearbeiten Sie `config/iocs.yaml` und fügen Sie die Einträge in den entsprechenden Abschnitten hinzu:```yaml
network_iocs:
malicious_ips:
- ip: "NEW.IP.ADDRESS.HERE"
port: 8080
context: "Description"
confidence: high
source: "Your source"
Dann aktualisieren Sie ThreatIntelSet:```bash python src/react2shell_detector.py --guardduty-bucket your-bucket
## Tests ausführen```bash
# Install test dependencies
pip install -r requirements.txt
# Run all tests
pytest tests/ -v
# Run specific test categories
pytest tests/test_terraform.py -v # Terraform validation
pytest tests/test_ioc_matching.py -v # IOC pattern tests
pytest tests/test_waf_patterns.py -v # WAF regex tests
# Run with coverage
pytest tests/ --cov=src --cov-report=html
Haftungsausschluss: Dieses Toolkit dient ausschließlich defensiven Sicherheitszwecken. Stellen Sie sicher, dass Sie über die entsprechende Autorisierung verfügen, bevor Sie Systeme scannen.