Large-Scale GitHub Actions Abuse Powers a Distributed cPanel and WHM Exploitation Campaign

Large-Scale GitHub Actions Abuse Powers a Distributed cPanel and WHM Exploitation Campaign
A malicious Packagist development-version campaign tied to the compromised dinushchathurya repositories used GitHub Actions workflows to turn GitHub-hosted runners into disposable infrastructure for scanning and exploiting cPanel and WHM systems, including CVE-2026-41940. The operation also harvested credentials, configuration data, and tokens, with evidence showing the campaign extends far beyond one maintainer and uses infrastructure at 43[.]228[.]157[.]68 and DNSHook callbacks to coordinate exfiltration. #dinushchathurya #cPanel #WHM #CVE-2026-41940 #GitHubActions #DNSHook

Keypoints

  • Malicious content was embedded in GitHub Actions workflow files, not in the PHP package code itself.
  • Packagist synchronized malicious development versions across all ten packages linked to the compromised developer account.
  • Each affected package version contained dozens of malicious workflows, totaling 583 workflow files across the campaign sample.
  • The workflows launched GitHub-hosted Ubuntu runners, downloaded payloads from 43[.]228[.]157[.]68, and performed scanning and exploitation tasks.
  • The payload targeted cPanel and WHM systems and attempted exploitation of CVE-2026-41940 while searching for credentials and secrets.
  • Exfiltration used HTTP POST requests, heartbeat callbacks, and staged file uploads to report results back to attacker infrastructure.
  • GitHub searches found thousands of matching workflow files, indicating a broader campaign affecting multiple repositories beyond the original Packagist packages.

MITRE Techniques

  • [T1195.001 ] Supply Chain Compromise: Compromise Software Dependencies and Development Tools – The attacker abused compromised repository content and Packagist synchronization to distribute malicious workflow files (‘Packagist automatically synchronized malicious development versions across all ten packages’).
  • [T1584.006 ] Compromise Infrastructure: Web Services – The campaign relied on attacker-controlled web infrastructure for payload delivery and collection (‘download a corresponding Linux scanning and exploitation payload from the threat actor-controlled command and control server’).
  • [T1059.004 ] Command and Scripting Interpreter: Unix Shell – The workflow executed Linux payloads and shell commands on GitHub-hosted runners (‘curl… wget… chmod 755 /tmp/.svc’).
  • [T1105 ] Ingress Tool Transfer – The payload was downloaded from attacker infrastructure to the runner (‘download a corresponding Linux scanning and exploitation payload from 43[.]228[.]157[.]68’).
  • [T1082 ] System Information Discovery – The payload detected runner processor architecture before selecting the correct binary (‘detect each runner’s processor architecture’).
  • [T1496.002 ] Resource Hijacking: Bandwidth Hijacking – GitHub-hosted runners were used as disposable compute and network resources for attack operations (‘use their compute and internet connectivity to execute the payload, scan targets’).
  • [T1595.002 ] Active Scanning: Vulnerability Scanning – The payload scanned broad internet-facing targets and searched for exposed services (‘scans a broad range of internet-facing systems’).
  • [T1190 ] Exploit Public-Facing Application – The payload targeted cPanel and WHM and attempted to exploit CVE-2026-41940 (‘–exploit CVE-2026-41940’).
  • [T1552.001 ] Unsecured Credentials: Credentials in Files – The payload searched for credentials, tokens, keys, and configuration data stored on servers (‘searches compromised servers for credentials, configuration files, environment variables’).
  • [T1005 ] Data from Local System – Data was collected from compromised servers and runner outputs (‘searches compromised servers for… database access, SSH material’).
  • [T1119 ] Automated Collection – The workflows continuously monitored result files and collected newly written data automatically (‘monitors files containing exploitation results… uploads newly written content’).
  • [T1074.001 ] Data Staged: Local Data Staging – Results were buffered and uploaded in chunks, with offsets tracked to avoid duplicates (‘uploads newly collected results through HTTP POST requests’).
  • [T1071.001 ] Application Layer Protocol: Web Protocols – Heartbeats and results were sent over HTTP POST (‘curl -s -X POST “$PANEL/api/github-heartbeat”‘).
  • [T1071.004 ] Application Layer Protocol: DNS – DNS lookups were used as callbacks to confirm execution (‘nslookup … dnshook[.]site’).
  • [T1020 ] Automated Exfiltration – Collected data was automatically sent back to attacker infrastructure in chunks (‘The workflow tracks line offsets… live collection transmits’).
  • [T1041 ] Exfiltration Over C2 Channel – Stolen data and telemetry were sent to the command-and-control server (‘upload newly collected results through HTTP POST requests’).

Indicators of Compromise

  • [IP address ] attacker infrastructure and payload delivery host – 43[.]228[.]157[.]68, 43[.]228[.]157[.]68:80
  • [URL paths ] payload delivery, heartbeat, and exfiltration endpoints – /api/dl/386, /api/dl/amd64, /api/github-heartbeat, /api/github-results
  • [Domain ] DNS callback used for execution confirmation – f5b0b742-240a-4811-8a5b-b0ba6060685d.dnshook[.]site
  • [File hash ] recovered AMD64 payload hash – 22f721fd3a81d2e27cbf90a122bb977f630c50b79daa98350f0e57b04dfa81f1
  • [Package names ] affected Packagist packages linked to the compromised maintainer – dinushchathurya/srilankan-local-authorities, dinushchathurya/websmslk
  • [GitHub/Packagist accounts ] compromised maintainer identities referenced by the campaign – dinushchathurya, https://github.com/dinushchathurya/


Read more: https://socket.dev/blog/github-actions-abuse-powers-cpanel-and-whm-exploitation