CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-GR3R-CRP5-QRRM

GHSA-GR3R-CRP5-QRRM: Supply Chain Compromise in intercom-php via Malicious Composer Plugin

Alon Barad
Alon Barad
Software Engineer

May 7, 2026·7 min read·20 visits

Executive Summary (TL;DR)

A malicious version (5.0.2) of the intercom/intercom-php package was published via a compromised GitHub tag. It uses a malicious Composer plugin to automatically execute code during installation, exfiltrating local secrets and environment variables. All organizations that installed this version must immediately rotate all potentially exposed credentials.

The intercom/intercom-php package on Packagist was subjected to a supply chain compromise by the TeamPCP threat actor group. Attackers published a malicious package version (5.0.2) utilizing a Composer plugin to achieve arbitrary code execution upon installation, resulting in the exfiltration of environment variables and sensitive credentials to an external command-and-control server.

Vulnerability Overview

The vulnerability tracked as GHSA-GR3R-CRP5-QRRM represents a direct supply chain compromise of the intercom/intercom-php package, a widely utilized PHP binding for the Intercom API. Threat actors successfully gained unauthorized access to the repository's publishing pipeline and released a malicious version tagged as 5.0.2. This attack is attributed to the "Mini Shai-Hulud" campaign operated by the TeamPCP group.

The attack vector leverages the Packagist ecosystem's integration with GitHub for version tagging. The threat actors pushed the 5.0.2 tag containing an altered composer.json file. This file reconfigured the package type from a standard library to a Composer plugin. The modified package metadata instructed the Composer package manager to execute untrusted PHP code automatically upon installation or update.

This incident is classified under CWE-506 (Embedded Malicious Code) and CWE-912 (Supply Chain Compromise). The malware targets the developer environment or the Continuous Integration/Continuous Deployment (CI/CD) pipeline running the Composer process. The primary objective of the embedded payload is the immediate exfiltration of sensitive configuration files and environment variables to an external infrastructure.

The compromise of intercom-php occurred simultaneously with a similar attack against the intercom-client npm package (version 7.0.4). This cross-ecosystem strategy indicates a coordinated effort to target environments utilizing Intercom developer tools, maximizing the probability of successful credential harvesting across diverse technology stacks.

Root Cause Analysis

The root cause of this vulnerability lies in the compromise of maintainer credentials combined with the inherent execution privileges granted to Composer plugins. Attackers obtained sufficient authorization to push signed tags to the official GitHub repository, which Packagist automatically synchronized and published to the broader PHP ecosystem.

Composer plugins are a deliberate feature of the PHP package manager designed to extend its core functionality. When a package is defined with "type": "composer-plugin" in its composer.json file, Composer loads and executes the plugin's code within its own runtime during the lifecycle events, such as init, pre-install-cmd, and post-install-cmd. This design assumes explicit trust between the developer and the package maintainer.

The threat actors exploited this trust model by embedding malicious logic within the plugin initialization class. Because Composer operations frequently run with the privileges of the developer user or the CI/CD service account, the executing malware inherits extensive access to the local filesystem and the host's environment variables. The system lacks native sandboxing or permission boundaries for executing plugins.

Once the authentication boundary was breached, the technical mechanism relied entirely on the abuse of intended functionality. The system functioned exactly as designed, prioritizing automated extensibility over execution restrictions. This lack of runtime isolation for dependency lifecycle hooks remains a systemic weakness in modern package managers.

Code Analysis and Attack Mechanics

The attack mechanics center on the structural modification of the composer.json file introduced in the malicious 5.0.2 tag. A standard PHP library configuration was replaced with a plugin configuration requiring automatic initialization. Below is an illustrative comparison of the metadata structure.

// Standard Package Configuration
{
    "name": "intercom/intercom-php",
    "type": "library",
    "autoload": {
        "psr-4": { "Intercom\\": "src/" }
    }
}
 
// Malicious Plugin Configuration
{
    "name": "intercom/intercom-php",
    "type": "composer-plugin",
    "extra": {
        "class": "Intercom\\Plugin\\MaliciousInit"
    },
    "autoload": {
        "psr-4": { "Intercom\\": "src/" }
    }
}

The extra.class directive instructs Composer to instantiate the specified PHP class immediately upon loading the package. The malicious class implements the Composer\Plugin\PluginInterface and utilizes the activate method to execute its primary payload before the developer or build system interacts with the codebase.

The payload executes a targeted search across the host filesystem for high-value configuration files. It systematically reads files such as .env, .aws/credentials, and .kube/config. It also captures the runtime environment using the PHP getenv() function. The collected data is concatenated, encoded, and transmitted via an HTTP POST request to a remote command-and-control server operated by TeamPCP.

Because the malicious code is invoked during the resolution and installation phase, the exfiltration occurs prior to any application-level testing or runtime execution. The developer only needs to issue a standard command like composer require intercom/intercom-php or composer update to trigger the complete execution chain.

Exploitation Flow

The exploitation flow requires no direct interaction beyond the routine management of application dependencies. The process begins when an automated system or a developer resolves the package graph for a project depending on intercom/intercom-php. If the constraints allow for version 5.0.2, Composer retrieves the artifact from Packagist.

During the extraction phase, the Composer runtime parses the composer.json file and identifies the package as a plugin. It loads the autoloader and invokes the plugin's entry point. This phase happens synchronously within the console session, often delaying the output of the terminal slightly while the HTTP request to the C2 server completes.

The attack completes its primary objective in seconds. The exfiltrated payload typically contains AWS Access Keys, database connection strings, GitHub Personal Access Tokens, and internal API keys. These credentials are subsequently weaponized by the threat actors for secondary intrusions, privilege escalation within cloud environments, or further supply chain compromises.

This vector bypasses traditional perimeter defenses because the outbound network connection originates from a trusted host (a developer workstation or an established CI runner) and utilizes standard web protocols (HTTPS). Security controls focusing solely on incoming traffic or application-layer vulnerabilities provide no visibility into this execution path.

Impact Assessment

The impact of installing version 5.0.2 of intercom-php is an immediate and total compromise of confidentiality for the affected environment. The malicious plugin achieves arbitrary code execution with the permissions of the user running the Composer process. In CI/CD environments, this often includes administrative access to deployment targets and access to highly privileged service principals.

The exfiltration of environment variables and credential files provides the attackers with persistent access to the victim's infrastructure. With stolen AWS credentials, attackers can provision unauthorized resources, access private S3 buckets, or manipulate Route53 DNS records. With stolen database credentials, they can extract or destroy customer data.

The secondary impact involves lateral movement across the software supply chain. If the compromised developer account holds publishing rights to other internal or external packages, the attackers can inject similar malware into downstream dependencies. This cascading effect was a primary goal of the Mini Shai-Hulud campaign.

Due to the automated nature of the exploitation and the severe consequences of credential theft, this vulnerability carries a functional severity equivalent to a CVSS 10.0. The lack of authentication required to deliver the payload, combined with the high privileges of the target process, maximizes the overall risk profile for any affected organization.

Remediation and Mitigation

The immediate remediation step is the absolute removal of the 5.0.2 version from all environments. Organizations must audit their composer.lock files across all repositories to verify if the 5.0.2 tag was ever resolved and installed. If the version is detected, it must be downgraded to a known safe version (e.g., 4.x) or upgraded to a secure version released post-incident.

If evidence suggests that version 5.0.2 was executed on any system, organizations must assume a total compromise of all secrets accessible to that system. This requires the immediate rotation of all environment variables, database passwords, AWS IAM keys, and API tokens present on the affected developer workstations or CI/CD runners. Failure to rotate these credentials leaves the infrastructure vulnerable to persistent access, even after the malicious package is removed.

To mitigate future supply chain risks, organizations should implement strict version pinning in dependency management. Relying on exact versions in composer.json and rigidly enforcing the use of composer.lock during deployments prevents unexpected automated upgrades to malicious tags. Furthermore, limiting the network egress of CI/CD environments to a strict allowlist prevents the successful exfiltration of data to unauthorized C2 domains.

Maintainers of open-source projects must enforce Two-Factor Authentication (2FA) on all repository and registry accounts. Limiting the lifespan of API tokens and employing automated secrets scanning within the repository can prevent the initial account takeover that facilitates these supply chain attacks.

Technical Appendix

CVSS Score
10.0/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

Affected Systems

Packagist PHP EcosystemComposer Package Manager RuntimeDeveloper WorkstationsCI/CD Pipelines

Affected Versions Detail

Product
Affected Versions
Fixed Version
intercom/intercom-php
Intercom
5.0.2Removed from registry; use alternative verified versions.
AttributeDetail
CWE IDCWE-506 / CWE-912
Attack VectorSupply Chain / Malicious Package
CVSS Score10.0 (Critical)
Execution ContextComposer Plugin Lifecycle
Primary ImpactCredential Exfiltration
Exploit StatusActive Exploitation (Remediated)

MITRE ATT&CK Mapping

T1195.001Supply Chain Compromise: Compromise Software Dependencies and Development Tools
Initial Access
T1552.001Unsecured Credentials: Credentials In Files
Credential Access
T1048Exfiltration Over Alternative Protocol
Exfiltration
CWE-506
Embedded Malicious Code

Embedded Malicious Code executing within the package manager lifecycle.

Vulnerability Timeline

Malicious tag 5.0.2 is detected and reported.
2026-04-27
Intercom initiates investigation and updates status page.
2026-04-27
Socket Research Team publishes comprehensive analysis of the attack.
2026-04-30

References & Sources

  • [1]GitHub Advisory: GHSA-gr3r-crp5-qrrm
  • [2]Intercom Status History
  • [3]Socket Blog - Mini Shai-Hulud Packagist Compromise
  • [4]Wiz Analysis of TeamPCP Campaign
  • [5]Incident Timeline // TeamPCP Supply Chain Campaign

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 1 hour ago•GHSA-4CC2-G9W2-FHF6
5.9

GHSA-4cc2-g9w2-fhf6: Server-Side Request Forgery in python-zeep via Transitive Schema Resolution

A regression in python-zeep (versions 4.0.0 through 4.3.2) silently ignores the security configuration designed to block transitive external resource fetches during WSDL and XSD parsing. This defect exposes applications to Server-Side Request Forgery (SSRF) when loading untrusted schemas.

Amit Schendel
Amit Schendel
2 views•6 min read
•about 3 hours ago•CVE-2026-11941
5.6

CVE-2026-11941: Use-After-Free Vulnerabilities in Cloudflare Quiche FFI Layer

Two critical use-after-free vulnerabilities exist within the Foreign Function Interface (FFI) layer of Cloudflare Quiche, affecting connection ID iterator functions. These flaws occur because raw pointers are returned to C callers pointing to temporary, owned Rust values that are immediately dropped and deallocated upon function exit. This leads to undefined behavior, potential limited heap information disclosure, or application crashes when integrating applications dereference these dangling pointers.

Alon Barad
Alon Barad
4 views•7 min read
•about 3 hours ago•GHSA-C3XH-98XP-6QHF
7.1

GHSA-C3XH-98XP-6QHF: Command Injection via Issue Title in Discord Notification Workflow

A command injection vulnerability exists in the .github/workflows/discord-issue.yml workflow of the gouef/githubtoplanguages repository. By exploiting literal string interpolation of untrusted issue titles into an inline Bash script, an attacker can execute arbitrary code within the GitHub Actions runner environment. This exposure risks the theft of repository secrets such as the Discord webhook URL.

Alon Barad
Alon Barad
4 views•5 min read
•about 4 hours ago•GHSA-F4XH-W4CJ-QXQ8
7.7

GHSA-F4XH-W4CJ-QXQ8: Arbitrary Server-Side File Read in LangSmith SDK TracingMiddleware

The LangSmith Python SDK TracingMiddleware is vulnerable to an arbitrary server-side file read. Due to origin validation and type confusion flaws, external inputs parsed from distributed tracing headers bypass local filesystem read protections, allowing remote attackers to silently exfiltrate arbitrary server files to the telemetry dashboard.

Alon Barad
Alon Barad
4 views•6 min read
•1 day ago•GHSA-H5X8-XP6M-X6Q4
7.1

GHSA-H5X8-XP6M-X6Q4: Unvalidated Signature Generation in @jhb.software/payload-cloudinary-plugin

The @jhb.software/payload-cloudinary-plugin exposes an endpoint that performs unvalidated cryptographic signing of Cloudinary API parameters, allowing authenticated users with minimal privileges to forge valid signatures for arbitrary actions. This flaw allows attackers to overwrite remote storage assets, execute unauthorized file uploads, alter asset visibility parameters, trigger SSRF webhooks, and perform directory traversal within Cloudinary repositories.

Alon Barad
Alon Barad
3 views•6 min read
•1 day ago•GHSA-G2GW-Q38M-VJFC
8.7

GHSA-G2GW-Q38M-VJFC: Server-Side Request Forgery and Bearer Token Exfiltration in @merill/lokka

A Server-Side Request Forgery (SSRF) and Bearer Token Exfiltration vulnerability exists in the @merill/lokka (Lokka) Model Context Protocol (MCP) server prior to version 2.1.2. The server constructed Azure Resource Manager request URLs by concatenating user-controlled path parameters directly into destination request strings. By injecting authority-redefinition characters, an attacker can manipulate URL parsing to execute a host-escape attack, forcing the server to send high-privilege Azure Resource Manager (ARM) Bearer tokens to an external attacker-controlled host. This allows complete administrative access to the associated Azure subscriptions.

Alon Barad
Alon Barad
6 views•7 min read