Penetration Test Report

Target: company-f.example.com  |  Date: March 12, 2026  |  Type: External Black-Box  |  Authorization: Written client approval

Executive Summary

An external black-box penetration test was conducted against company-f.example.com and all discoverable subdomains. The assessment identified 24 findings across 8 test modules.


The most critical issue is the server running PHP 7.4.33, which has been end-of-life since November 2022 with no security patches. The site is hosted on Hosting Provider shared infrastructure (Netherlands) with cPanel/WHM management ports publicly exposed. Email security is severely lacking with no DMARC record, enabling email spoofing attacks.


On the positive side, the site deploys Imunify360 WAF + OpenResty reverse proxy which aggressively blocks automated requests, and has implemented WordPress hardening measures including login URL obfuscation, REST API blocking, and hidden admin panels.

Security Score

62 / 100

MODERATE

Strong WAF and WordPress hardening offset by critical infrastructure weaknesses (EOL PHP, exposed management ports, missing email security).

5High
7Medium
8Low
4Info

Target Architecture

Client
Browser
Reverse Proxy / WAF
OpenResty xxx.xxx.xxx.xxx
+ Imunify360
Web Server
LiteSpeed
PHP 7.4.33 (EOL)
CMS
WordPress 6.9.3
WPBakery 8.4.1
ComponentDetail
Hosting ProviderHosting Provider (redacted.hosting.example.com) - Netherlands
Server IP10.0.6.1
Control PanelcPanel/WHM (ports 2082-2087 open)
CMSWordPress 6.9.3
Page BuilderWPBakery (js_composer) 8.4.1
ThemeWerkstatt v4.7.3 (with child theme)
PluginsWPBakery 8.4.1, MPC Massive xxx.xxx.xxx.xxx, Indeed My Logos VC
WAFImunify360 + OpenResty xxx.xxx.xxx.xxx
PHP7.4.33 (EOL since Nov 2022)
SSLLet's Encrypt (shared cert with 3dimensionstudio.com)
EmailMailhostbox (us2.mx1-3.mailhostbox.com)
DNSHosting Provider (ns1-4.hosting.example.com)
Subdomains13 discovered (9 on main IP, 4 on Mailhostbox)
Open Ports16 (FTP, SSH, SMTP, DNS, HTTP, POP3, IMAP, HTTPS, SMTPS, Submission, IMAPS, POP3S, cPanel x4)

Findings Overview

IDSeverityCategoryFindingCVSS
H1HIGHInfrastructurePHP 7.4.33 End-of-Life (No Security Patches)8.0
H2HIGHInfrastructurecPanel/WHM Management Ports Publicly Exposed7.5
H3HIGHHTTP HeadersMissing Content-Security-Policy Header7.0
H4HIGHEmailNo DMARC Record - Domain Spoofable7.0
H5HIGHInfrastructureFTP Service Exposed (Cleartext Credentials)6.5
M1MEDIUMHTTP HeadersTRACE Method Enabled (Cross-Site Tracing)5.5
M2MEDIUMHTTP HeadersPUT/DELETE/PATCH Methods Return 2005.0
M3MEDIUMEmailOverly Broad SPF Authorization5.0
M4MEDIUMInformationPHP Version Disclosed in X-Powered-By4.5
M5MEDIUMSSL/TLSInconsistent HSTS - Missing on Proxy Layer4.5
M6MEDIUMSSL/TLSNo HTTP-to-HTTPS Redirect on Proxy Layer4.5
M7MEDIUMWordPresswp-cron.php Publicly Accessible4.5
L1LOWDNSNo CAA DNS Record3.5
L2LOWEmailSPF Softfail (~all) Instead of Hardfail (-all)3.0
L3LOWSSL/TLSOCSP Stapling Not Enabled3.0
L4LOWInformationWordPress Version in Generator Meta Tag2.5
L5LOWInformationWPBakery Version in Generator Meta Tag2.5
L6LOWInformationServer Version Disclosure (LiteSpeed + OpenResty)2.5
L7LOWHTTP HeadersMissing Referrer-Policy Header2.0
L8LOWHTTP HeadersMissing Permissions-Policy Header2.0
I1INFOSSL/TLSShared SSL Certificate (CN: *.3dimensionstudio.com)-
I2INFOInfrastructureSingle IP - All Services on One Server-
I3INFOSubdomainWebmail SSL Misconfiguration-
I4INFOOSINTGoogle Site Verification Record Present-

HIGH Severity Findings

H1: PHP 7.4.33 End-of-Life - No Security Patches Since Nov 2022 HIGH | CVSS 8.0

Module: 01, 03, 04, 05  |  Component: Server PHP Runtime

Evidence: Response header X-Powered-By: PHP/7.4.33 present on all responses. PHP 7.4 reached end-of-life on November 28, 2022. Over 3 years without security patches.

Impact: Known unpatched CVEs in PHP 7.4 can be exploited for remote code execution, information disclosure, and denial of service. Any PHP vulnerability discovered after Nov 2022 remains exploitable.

Fix: Upgrade to PHP 8.2+ immediately. Test WordPress and all plugins for compatibility first. Most modern WordPress plugins support PHP 8.x.

H2: cPanel/WHM Management Ports Publicly Exposed (2082-2087) HIGH | CVSS 7.5

Module: 01, 02  |  Component: cpanel.company-f.example.com, ports 2082-2087

Evidence: Port scan confirms ports 2082 (cPanel HTTP), 2083 (cPanel HTTPS), 2086 (WHM HTTP), 2087 (WHM HTTPS) are all open. cpanel.company-f.example.com returns HTTP 200 with cPanel login page.

Impact: Attackers can attempt brute-force attacks against cPanel/WHM login. WHM access grants full server control. These are high-value targets on shared hosting.

Fix: Restrict cPanel/WHM access to specific IPs via firewall. If Hosting Provider allows, configure IP-based access restrictions in WHM. Use VPN for management access.

H3: Missing Content-Security-Policy Header HIGH | CVSS 7.0

Module: 03  |  Component: All HTTP responses

Evidence: No CSP header or meta tag present. External resources load from Adobe Typekit and Google Fonts without restriction.

Impact: Without CSP, if any XSS vulnerability exists, attackers have zero browser-side restrictions on injected scripts. This is the primary browser defense against XSS exploitation.

Fix: Add CSP header via LiteSpeed configuration. Start with report-only mode: Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' use.typekit.net fonts.googleapis.com; font-src fonts.gstatic.com use.typekit.net

H4: No DMARC Record - Domain Fully Spoofable HIGH | CVSS 7.0

Module: 06  |  Component: _dmarc.company-f.example.com

Evidence: host _dmarc.company-f.example.com returns NXDOMAIN. No DMARC TXT record exists.

Impact: Anyone can send emails appearing to come from @company-f.example.com. Without DMARC, receiving mail servers have no policy guidance for handling SPF/DKIM failures. This enables phishing attacks impersonating the domain owner.

Fix: Add DMARC record: _dmarc.company-f.example.com TXT "v=DMARC1; p=none; rua=mailto:dmarc@company-f.example.com" then progress to p=quarantine and finally p=reject.

H5: FTP Service Exposed (Port 21 - Cleartext Credentials) HIGH | CVSS 6.5

Module: 01, 02  |  Component: 10.0.6.1:21, ftp.company-f.example.com

Evidence: Port 21 (FTP) is open. ftp.company-f.example.com serves HTTP without TLS on port 80. FTP transmits credentials in cleartext.

Impact: FTP credentials can be intercepted via network sniffing (MITM attack). Combined with the shared hosting environment, this increases risk of unauthorized file access.

Fix: Disable FTP entirely. Use SFTP (port 22) for file transfers which is already available. Remove the FTP DNS record.

MEDIUM Severity Findings

M1: TRACE Method Enabled (Cross-Site Tracing Risk) MEDIUM | CVSS 5.5

Module: 03  |  Component: LiteSpeed web server

Evidence: curl -X TRACE https://company-f.example.com/ returns HTTP 200.

Impact: TRACE method can be exploited for Cross-Site Tracing (XST) attacks to steal HTTP-only cookies and authorization headers.

Fix: Disable TRACE in LiteSpeed configuration or add a rewrite rule to block it.

M2: PUT/DELETE/PATCH Methods Return 200 MEDIUM | CVSS 5.0

Module: 03  |  Component: All HTTP methods accepted

Evidence: PUT, DELETE, PATCH all return HTTP 200 on the root URL.

Fix: Restrict to GET, POST, HEAD, OPTIONS only at the web server level unless the application specifically requires other methods.

M3: Overly Broad SPF Authorization MEDIUM | CVSS 5.0

Module: 06  |  Component: SPF TXT record

Evidence: SPF redirects to _spf.mailhostbox.com which includes all._spf.ds.network authorizing 70+ IP CIDR blocks across multiple ASNs.

Impact: Any server on these authorized networks can pass SPF checks for this domain, greatly increasing the pool of potential spoofers.

Fix: Work with Mailhostbox to use more restrictive SPF includes, or consider migrating to a provider with tighter SPF scoping (Google Workspace, Microsoft 365).

M4: PHP Version Disclosed via X-Powered-By Header MEDIUM | CVSS 4.5

Module: 03, 04, 05  |  Component: All HTTP responses

Evidence: X-Powered-By: PHP/7.4.33 header present on every response.

Fix: Set expose_php = Off in php.ini to suppress this header.

M5: Inconsistent HSTS - Missing on OpenResty Proxy Layer MEDIUM | CVSS 4.5

Module: 03, 07  |  Component: OpenResty reverse proxy

Evidence: LiteSpeed sends Strict-Transport-Security: max-age=63072000; includeSubDomains but the OpenResty proxy layer does not pass this through on 415 responses. SSL/TLS audit confirmed HSTS missing on proxy responses.

Fix: Configure HSTS on both the OpenResty proxy and LiteSpeed layers. Add preload directive and submit to HSTS preload list.

M6: No HTTP-to-HTTPS Redirect on Proxy Layer MEDIUM | CVSS 4.5

Module: 07  |  Component: OpenResty on port 80

Evidence: HTTP requests to port 80 return 415 Unsupported Media Type instead of a 301 redirect to HTTPS. Users accessing http:// will see an error rather than being redirected.

Fix: Configure OpenResty to return 301 https://$host$request_uri for all HTTP port 80 traffic.

M7: wp-cron.php Publicly Accessible MEDIUM | CVSS 4.5

Module: 04  |  Component: /wp-cron.php

Evidence: curl https://company-f.example.com/wp-cron.php returns HTTP 200 (0 bytes).

Impact: Can be abused for timing attacks, resource exhaustion, or triggering scheduled tasks at attacker-controlled intervals.

Fix: Add define('DISABLE_WP_CRON', true); to wp-config.php and configure a server-side cron job. Block public access to wp-cron.php.

LOW Severity Findings

IDFindingEvidenceRecommended Fix
L1 No CAA DNS Record No CAA record found - any CA can issue certificates Add CAA 0 issue "letsencrypt.org" to DNS
L2 SPF Softfail (~all) Instead of Hardfail (-all) Terminal SPF mechanism is ~all Transition to -all after DMARC monitoring confirms legitimate senders
L3 OCSP Stapling Not Enabled OCSP response: no response sent Enable ssl_stapling on; in OpenResty config
L4 WordPress Version in Generator Meta Tag <meta name="generator" content="WordPress 6.9.3"> Add remove_action('wp_head', 'wp_generator') to theme functions.php
L5 WPBakery Version in Generator Meta Tag <meta name="generator" content="Powered by WPBakery Page Builder"> Remove WPBakery generator meta output via filter
L6 Server Version Disclosure Server: LiteSpeed and Server: openresty/xxx.xxx.xxx.xxx Set server_tokens off; in OpenResty. Suppress Server header in LiteSpeed.
L7 Missing Referrer-Policy Header No Referrer-Policy header present Add Referrer-Policy: strict-origin-when-cross-origin
L8 Missing Permissions-Policy Header No Permissions-Policy header; browser APIs unrestricted Add Permissions-Policy: camera=(), microphone=(), geolocation=()

Informational Findings

IDFindingDetails
I1 Shared SSL Certificate Certificate CN is *.3dimensionstudio.com; target domain covered via SAN entry. Reveals shared hosting with 3dimensionstudio.com
I2 Single IP - All Services on One Server 9 of 13 subdomains resolve to 10.0.6.1. Web, FTP, SSH, email (local), cPanel all on one shared host. Single point of failure.
I3 Webmail SSL Misconfiguration webmail.company-f.example.com HTTPS connection fails (HTTP 000). Redirect loop or SSL certificate issue.
I4 Google Site Verification Record google-site-verification=3W25N1W3wY0nLh7NWcSK9vftMJ-2CLZb_MRLIBymW-4 in DNS TXT records

Module 01: DNS & Infrastructure

DNS Records

TypeValue
A10.0.6.1
NSns1-4.hosting.example.com
MXus2.mx1/mx2/mx3.mailhostbox.com (priority 100)
TXT (SPF)v=spf1 redirect=_spf.mailhostbox.com
TXTGoogle Site Verification
SOAns1.hosting.example.com / root@redacted.hosting.example.com
AAAANone (IPv4 only)
CAANone
DMARCNone
Reverse DNSredacted.hosting.example.com

Open Ports (10.0.6.1)

PortServiceStatusRisk
21FTPOpenHIGH
22SSHOpenLOW
25SMTPOpenINFO
53DNSOpenINFO
80HTTPOpenINFO
110POP3OpenINFO
143IMAPOpenINFO
443HTTPSOpenINFO
465SMTPSOpenINFO
587SubmissionOpenINFO
993IMAPSOpenINFO
995POP3SOpenINFO
2082cPanel HTTPOpenHIGH
2083cPanel HTTPSOpenHIGH
2086WHM HTTPOpenHIGH
2087WHM HTTPSOpenHIGH

Module 02: Subdomain Enumeration

13 subdomains discovered via DNS brute-force (115 names tested) and Certificate Transparency logs.

SubdomainResolves ToHTTP StatusNotes
company-f.example.com10.0.6.1200Main site
www10.0.6.1301 → apexProper redirect
mail10.0.6.1301 → webmailRedirects to webmail
ftp10.0.6.1200 (HTTP only)No HTTPS
cpanel10.0.6.1200 (HTTPS)Login page exposed
webmailMailhostboxSSL Error (000)SSL misconfiguration
smtpMailhostboxN/AMail service only
popMailhostboxN/AMail service only
imapMailhostboxN/AMail service only
autodiscover10.0.6.1415cPanel service
cpcalendars10.0.6.1415cPanel service
cpcontacts10.0.6.1415cPanel service
webdisk10.0.6.1415cPanel service

PASS No subdomain takeover vulnerabilities found. All CNAMEs point to active services.

Module 03: HTTP Security Headers

HeaderStatusValue
Strict-Transport-SecurityPRESENTmax-age=63072000; includeSubDomains (missing preload)
Content-Security-PolicyMISSINGNo CSP - XSS has zero browser-side mitigation
X-Frame-OptionsPRESENTSAMEORIGIN
X-Content-Type-OptionsPRESENTnosniff
X-XSS-ProtectionMISSINGLegacy but still recommended
Referrer-PolicyMISSINGNo explicit policy
Permissions-PolicyMISSINGBrowser APIs unrestricted
COOP/CORP/COEPMISSINGNo cross-origin isolation

Score: 3 of 10 security headers present.

HTTP Methods

MethodStatusAssessment
GET / POST / HEAD / OPTIONS200Expected
PUT / DELETE / PATCH200Should be restricted
TRACE200XST risk - disable

PASS No CORS misconfiguration. No cookies set for unauthenticated users.

Module 04: Sensitive Files & Paths

90+ paths tested. WAF rate-limiting kicked in mid-scan, blocking later requests.

Notable Findings

PathStatusAssessment
robots.txt200 (31 bytes)Accessible - minimal directives
wp-cron.php200 (0 bytes)Accessible - potential DoS vector
wp-login.php404Hidden (login URL renamed)
wp-admin/302 → /404/Obfuscated
All wp-json/ endpoints415Blocked by WAF
.env, .git/, .htaccess, .htpasswd403Properly blocked
wp-config.php.bak/.old/.save/.swp403Properly blocked
xmlrpc.php000 (timeout)Blocked by WAF
phpmyadmin/, adminer.php415Blocked
debug.log, error_log415Blocked

Module 05: Tech Stack & WAF

WAF Detection: Imunify360

The site uses Imunify360 bot-protection fronted by OpenResty/xxx.xxx.xxx.xxx reverse proxy. This WAF:

WAF Bypass Testing

PayloadResult
XSS: ?q=<script>alert(1)</script>301 (partially blocked)
SQLi: ?q=1' OR 1=1--415 (blocked)
Path Traversal: ?q=../../etc/passwd415 (blocked)

NOTE XSS payload returned 301 rather than 415, suggesting inconsistent filtering for XSS vs SQLi payloads. However, no reflected content was found.

Module 06: Email Security

ControlStatusDetails
SPFWEAKConfigured but delegates to Mailhostbox which authorizes 70+ IP ranges via all._spf.ds.network. Uses ~all softfail.
DKIMPASS2048-bit RSA key configured under default selector.
DMARCFAILNo DMARC record. Domain can be freely spoofed.

Email Authentication: 1 of 3 controls properly configured (DKIM only)

Module 07: SSL/TLS Audit

Overall Rating: B

CheckResult
TLS 1.0 / 1.1Disabled
TLS 1.2Supported (ECDHE-RSA-AES256-GCM-SHA384)
TLS 1.3Supported (TLS_AES_256_GCM_SHA384)
Weak Ciphers (RC4/DES/EXPORT/NULL)Not accepted
Certificate ChainValid (Let's Encrypt R12 → ISRG Root X1)
Certificate Expiry~76 days remaining
HeartbleedNot vulnerable
HSTSInconsistent (present on LiteSpeed, missing on OpenResty)
HTTP → HTTPS RedirectBroken (returns 415 on port 80)
OCSP StaplingNot enabled

Module 08: Web Application Vulnerabilities

Testing was significantly limited by Imunify360 WAF. Most requests returned HTTP 415 or resulted in IP-based blocking (connection timeouts).

TestResult
Reflected XSSNot confirmed - no input reflection detected
SQL InjectionNot confirmed - no SQL errors, uniform 415 response
Directory TraversalNot confirmed - properly blocked
Open RedirectNot confirmed - no redirect headers
CSRFNot testable - no forms served to automated client
Verbose ErrorsNone found - clean error pages
IP Rate LimitingActive - testing IP was blocked mid-scan

NOTE The aggressive WAF makes external automated testing largely ineffective. Internal/authenticated testing would be required for deeper web app assessment.

Positive Security Findings

#FindingDetails
P1Imunify360 WAF ActiveBlocks automated requests, SQL injection, path traversal. Rate-limits scanning IPs.
P2Login URL Obfuscatedwp-login.php returns 404, wp-admin redirects to /404/. Prevents brute-force attacks.
P3REST API BlockedAll /wp-json/ endpoints return 415. User enumeration not possible.
P4Dotfiles Protected.env, .git, .htaccess, .htpasswd all return 403.
P5Config Backups ProtectedAll wp-config.php backup variants (.bak, .old, .save, .swp) return 403.
P6XML-RPC Blockedxmlrpc.php connection times out - prevents brute-force and DDoS amplification.
P7HSTS Enabled (LiteSpeed)2-year max-age with includeSubDomains on application layer.
P8X-Frame-Options SetSAMEORIGIN prevents clickjacking.
P9DKIM Configured2048-bit RSA key on default selector.
P10TLS 1.2/1.3 OnlyDeprecated protocols disabled. Strong cipher suites.
P11Child Theme UsedWerkstatt-child theme - proper WordPress development practice.
P12No CORS MisconfigurationServer does not return Access-Control-Allow-Origin headers.
P13Debug Logs Not Exposeddebug.log, error_log all blocked.
P14No Subdomain Takeover RiskAll CNAMEs point to active services. No dangling records.

Remediation Plan

Immediate (1-7 days)
  • H1: Upgrade PHP from 7.4.33 to 8.2+ (test compatibility first)
  • H4: Add DMARC record (p=none to start, then escalate)
  • H5: Disable FTP, use SFTP only
  • M4: Set expose_php = Off in php.ini
  • M7: Disable WP-Cron via web; use server cron
Short-Term (1-4 weeks)
  • H2: Restrict cPanel/WHM ports to specific IPs (coordinate with Hosting Provider)
  • H3: Implement Content-Security-Policy header (start with report-only)
  • M1: Disable TRACE method in LiteSpeed
  • M2: Block PUT/DELETE/PATCH at web server level
  • M5/M6: Configure HSTS and HTTP→HTTPS redirect on OpenResty proxy
Medium-Term (1-3 months)
  • M3: Evaluate email provider - consider Google Workspace or M365 for tighter SPF
  • L1: Add CAA DNS record restricting cert issuance to Let's Encrypt
  • L2: Transition SPF from ~all to -all after DMARC monitoring
  • L3: Enable OCSP stapling in OpenResty
  • L4-L6: Strip version information from meta tags and headers
  • L7-L8: Add Referrer-Policy and Permissions-Policy headers
Ongoing
  • Keep WordPress core, themes, and plugins updated
  • Monitor DMARC reports for unauthorized email use
  • Review Imunify360 WAF logs for attack patterns
  • Consider migrating off shared hosting for better security isolation
  • Schedule periodic penetration tests (quarterly recommended)

Methodology

ModuleDescriptionTools
01DNS & Infrastructure Reconnaissancehost, openssl, nc, port scanning
02Subdomain EnumerationDNS brute-force (115 names), crt.sh CT logs, HTTP probing
03HTTP Security Headers Analysiscurl, header analysis, CORS testing, HTTP method testing
04Sensitive Files & Path Discoverycurl (90+ paths tested), content analysis
05Technology Stack & WAF DetectionHTML source analysis, header fingerprinting, WAF payload testing
06Email Security & OSINTSPF/DKIM/DMARC analysis, MX records, DKIM selector testing
07SSL/TLS Security Auditopenssl s_client, protocol/cipher testing, chain validation
08Web Application Vulnerability TestingXSS/SQLi/traversal probes, form analysis, error handling

Standards: OWASP Testing Guide v4.2, PTES (Penetration Testing Execution Standard), NIST SP 800-115
Scope: External black-box testing. No authenticated/internal testing performed.
Limitations: Imunify360 WAF aggressively blocked automated testing, limiting depth of web application vulnerability assessment. Testing IP was rate-limited mid-scan. Internal/authenticated testing recommended for comprehensive coverage.
Authorization: Written client approval obtained prior to testing. All testing was non-destructive.

Penetration Test Report | company-f.example.com | March 12, 2026

Confidential - For authorized recipients only