REAL THREATS
Supply Chain & External Resource Attacks
• CRITICAL (0): update-rpz.sh downloads from user-controlled URLs without authentication, enabling SSRF/data exfiltration.
• HIGH (4, 6, 7): Unvalidated URL downloads in RPZ scripts with no certificate verification, allowing MITM attacks and open redirects.
• MEDIUM (12, 28, 30): User-controlled URLs for RPZ blocklists and root hints without validation.
• MEDIUM (29): Unbounded root hints download could lead to disk exhaustion.
Input Validation & Injection Vulnerabilities
• HIGH (2): Zone names and hostnames logged without PII filtering, exposing sensitive DNS data.
• HIGH (5): Unvalidated URL in log output could leak sensitive data through log injection.
• MEDIUM (16, 22): Error messages leak jq expression details and URL/file path information.
• MEDIUM (18, 20, 21): Unvalidated file input processing, URL parsing without scheme validation, and unsanitized hostnames written to DNS zones.
• MEDIUM (19): No input validation on jq expressions in genrpz.py.
Denial of Service
• HIGH (3): Unbounded file download in RPZ update script enables disk exhaustion.
• MEDIUM (17, 23, 32): No input file size validation, missing rate limiting on RPZ update cron jobs, and cron job configuration lacks rate limiting constraints.
Security Misconfiguration
• HIGH (10): SELinux semanage installation fails silently, potentially leaving ports unconfigured.
• MEDIUM (13): DNSSEC validation disabled by default weakens DNS security.
• MEDIUM (25, 26): Test profile uses weak DH parameters (1024-bit) and unusual SELinux port configuration.
• MEDIUM (38): Overly restrictive TLS cipher configuration could break compatibility.
Missing Security Controls
• HIGH (11): No correlation IDs for RPZ update operations hinders traceability.
• MEDIUM (14, 15, 24, 27, 37): Missing request logging for DoH/DoT, unstructured logs, lack of audit trails for RPZ updates, root hints updates, and TLS certificate operations.
• MEDIUM (33, 34): Cron job execution without input validation and insufficient monitoring of RPZ update failures.
• MEDIUM (35, 36): RPZ update cron jobs execute as root with failures silently ignored.
ATTACK CHAINS
1. SSRF → Data Exfiltration → Persistence: An attacker could chain findings 0, 4, 6, and 7 to:
- Use the unauthenticated URL download in
update-rpz.sh to perform SSRF attacks against internal services
- Intercept downloads via MITM due to missing certificate verification
- Inject malicious content into logs or DNS zones
- Establish persistence through cron jobs that execute as root
2. DoS → Log Injection → Information Disclosure: Findings 3, 5, and 2 could be combined to:
- Exhaust disk space with large downloads
- Inject malicious content into error logs
- Extract sensitive DNS zone information from logs
VERDICT
Immediate fixes required:
1. CRITICAL: Fix the SSRF vulnerability in update-rpz.sh (0) by implementing URL validation, authentication checks, and download limits.
2. HIGH: Address the supply chain issues (4, 6, 7) by adding certificate verification, URL validation, and secure download mechanisms.
3. HIGH: Implement proper input validation and logging sanitization (2, 5, 16, 18-22) to prevent injection attacks and information disclosure.
4. HIGH: Fix the silent failure in SELinux configuration (10) and add correlation IDs for RPZ operations (11).
Secondary priorities:
• Implement rate limiting and file size validation to prevent DoS (3, 17, 23, 29, 32)
• Enable DNSSEC validation by default (13)
• Add comprehensive audit logging and monitoring (14, 15, 24, 27, 33-37)
• Fix weak cryptographic configurations (25, 38)
The RPZ update system presents the greatest attack surface, with multiple chained vulnerabilities that could lead to complete system compromise. The DNS server's critical role in network infrastructure makes these issues particularly dangerous.