The Worm That Keeps on Digging: TeamPCP Hits @antv in Latest Wave

Multi-ecosystem supply chain compromise by TeamPCP targets GitHub, NPM, and VSCode to steal credentials and establish persistence.

The ongoing software supply chain campaign targeting the open source ecosystem reemerged on May 19th, affecting NPM packages, GitHub Actions, and a VSCode extension.  The distributed malware was designed to harvest credentials, exfiltrate sensitive data, and establish persistent access on infected systems. 

As the activity unfolded publicly, Wiz Research independently observed related malicious activity in real time across developer and CI/CD environments.

Based on infrastructure analysis, malware behavior, and operational overlaps identified during the investigation, Wiz attributes this activity to the threat actor known as “TeamPCP”.

What Happened

Researchers have dissected a coordinated software supply chain attack campaign affecting multiple components within the developer ecosystem, including npm packages (prominently those in the @antv namespace), GitHub Actions (e.g actions-cool/issues-helper) and a VSCode extension (nrwl.angular-console v18.95.0). 

Upon installation of the npm packages, the malicious code initiated a multi-stage infection chain designed to retrieve additional payloads from GitHub-hosted infrastructure. In several cases, the payloads were stored in orphaned GitHub commits, likely as an attempt to evade detection and maintain operational resilience. The malware then used bun to install and execute secondary payloads responsible for credential theft and persistence.

The malware collected a wide range of sensitive artifacts from infected systems, including GitHub tokens, SSH keys, cloud credentials, browser-stored secrets, and other developer-related authentication material. Exfiltration occurred through attacker-created public GitHub repositories generated from the victim environment. Investigators observed repositories created with the description:

niagA oG eW ereH :duluH-iahS

In addition to credential theft, the malware established persistence by installing a Python-based backdoor at:

~/.local/share/kitty/cat.py

The backdoor periodically polled GitHub for signed command-and-control messages containing the string: firedalazer

When a valid signed instruction is identified, the malware retrieves and executes remote Python code from attacker-controlled infrastructure, effectively providing the operators with ongoing remote execution capabilities on compromised systems. To date, this command and control infrastructure has not been observed active

Investigation into additional impacted packages and infrastructure remains ongoing.

Attribution

Wiz Research assesses with moderate confidence that this activity is associated with the threat actor known as “TeamPCP”. The attribution is based on infrastructure overlaps, malware functionality, operational patterns, and tradecraft observed throughout the investigation.

While the investigation remains ongoing, the campaign demonstrates coordination and operational maturity consistent with previous activity linked to the group.

Indicators of Compromise

File Paths

~/.local/share/kitty/cat.py

GitHub Repository Description

niagA oG eW ereH :duluH-iahS

Command-and-Control Trigger

firedalazer

Network Indicators

IndicatorRole
api.github.com/search/commits?q=firedalazerBackdoor polling to Github for commands
m-kosche.com (185.95.159.32)Backup Malware C2

Host Indicators

FilePurposeHash
BackdoorStored at ~/.local/share/kitty/cat.py`MD5: b06b126b9e26af03a7ef2f8b8e90d446 Sha-1: 783b4019fc5b942a29846132d28441c8fc31bed8 SHA256: fb5c97557230a27460fdab01fafcfabeaa49590bafd5b6ef30501aa9e0a51142,
persistence

macOS ~/Library/LaunchAgents/com.user.kitty-monitor.plist Linux ~/.config/systemd/user/kitty-monitor.service

What Steps Should Security Teams Take

  • Organizations should immediately investigate developer workstations, CI/CD environments, and repositories for signs of compromise. Teams should audit systems for the affected packages, GitHub Actions, and VSCode extensions, while also reviewing GitHub activity for unauthorized repositories, newly created access tokens, or suspicious workflow executions.

  • Because the malware targets developer credentials and secrets, organizations should assume potential exposure of GitHub tokens, SSH keys, cloud credentials, and CI/CD secrets, and rotate them accordingly.

  • Security teams should also hunt for persistence mechanisms and unusual outbound GitHub communication, including the presence of the following file: ~/.local/share/kitty/cat.py/

  • Finally, organizations should strengthen software supply chain defenses by implementing dependency allowlisting, SBOM generation, package verification, and improved monitoring of developer and build environments.

How Wiz Can Help

Wiz customers can use the pre-built queries and advisory in the Wiz Threat Intel Center to search for relevant instances in their environment. Wiz Research will continue to update that advisory as the situation develops. 

References

Appendix

Affected GitHub Actions

Column AColumn B
NameAffected Versions
actions-cool/maintain-one-commentAll tags for a limited time
actions-cool/issues-helperAll tags for a limited time

Compromised VSCode Extension

Column AColumn B
NameAffected Version
nrwl.angular-console18.95.0

Malicious NPM Packages

Column AColumn B
PackageAffected Versions
@antv/a80.1.1, 0.2.1
@antv/adjust0.3.5, 0.4.5
@antv/algorithm0.2.26, 0.3.26
@antv/async-hook2.3.9, 2.4.9
@antv/attr0.4.5, 0.5.5
@antv/ava3.5.1, 3.6.1
@antv/ava-react3.4.2, 3.5.2
@antv/awards0.1.9, 0.2.9
@antv/calendar-heatmap1.2.2, 1.3.2
@antv/chart-linter1.2.6, 1.3.6
@antv/chart-node-g60.1.4, 0.2.4
@antv/chart-visualization-skills0.2.3, 0.3.3
@antv/ckb2.1.4, 2.2.4
@antv/color-schema0.3.3, 0.4.3
@antv/color-util2.1.6, 2.2.6
@antv/component2.2.11, 2.3.11
@antv/coord0.5.7, 0.6.7
@antv/d3-color1.1.0, 1.2.0
@antv/d3-interpolate1.1.3, 1.2.3
@antv/data-samples1.1.1, 1.2.1
@antv/data-set0.12.8, 0.13.8
@antv/data-wizard2.1.4, 2.2.4
@antv/dipper-component0.1.4, 0.2.4
@antv/dipper-hooks0.3.1, 0.4.1
@antv/dipper-map1.1.10, 1.2.10
@antv/dom-util2.1.4, 2.2.4
@antv/dumi-theme-antv0.9.4, 0.10.4
@antv/dw-analyzer1.2.5, 1.3.5
@antv/dw-random1.2.7, 1.3.7
@antv/dw-transform1.2.7, 1.3.7
@antv/dw-util1.2.4, 1.3.4
@antv/event-emitter0.2.3, 0.3.3
@antv/expr1.1.2, 1.2.2
@antv/f-charts0.1.0, 0.2.0
@antv/f-engine1.11.0, 1.12.0
@antv/f-lottie1.11.0, 1.12.0
@antv/f-my1.11.0, 1.12.0
@antv/f-react1.11.0, 1.12.0
@antv/f-test-utils1.1.9, 1.2.9
@antv/f-vue1.11.0, 1.12.0
@antv/f-wx1.11.0, 1.12.0
@antv/f25.15.0, 5.16.0
@antv/f2-algorithm5.8.0, 5.9.0
@antv/f2-canvas1.1.5, 1.2.5
@antv/f2-context0.1.1, 0.2.1
@antv/f2-graphic0.1.16, 0.2.16
@antv/f2-my4.1.52, 4.2.52
@antv/f2-react5.15.0, 5.16.0
@antv/f2-site4.1.42, 4.2.42
@antv/f2-vue4.1.33, 4.2.33
@antv/f2-wordcloud5.15.0, 5.16.0
@antv/f2-wx4.1.51, 4.2.51
@antv/f60.1.19, 0.2.19
@antv/f6-alipay0.1.7, 0.2.7
@antv/f6-core0.1.2, 0.2.2
@antv/f6-element0.1.1, 0.2.1
@antv/f6-hammerjs0.1.2, 0.2.2
@antv/f6-plugin1.1.6, 1.2.6
@antv/f6-ui1.1.3, 1.2.3
@antv/f6-wx0.1.7, 0.2.7
@antv/g6.4.1, 6.5.1
@antv/g-base0.6.16, 0.7.16
@antv/g-camera-api2.1.45, 2.2.45
@antv/g-canvas2.3.0, 2.4.0
@antv/g-canvaskit1.2.1, 1.3.1
@antv/g-compat1.1.11, 1.2.11
@antv/g-components2.1.42, 2.2.42
@antv/g-css-layout-api1.1.38, 1.2.38
@antv/g-css-typed-om-api1.1.38, 1.2.38
@antv/g-device-api1.7.13, 1.8.13
@antv/g-dom-mutation-observer-api2.1.42, 2.2.42
@antv/g-gesture3.1.42, 3.2.42
@antv/g-image-exporter1.1.42, 1.2.42
@antv/g-layout-blocklike1.8.49, 1.9.49
@antv/g-lite2.8.0, 2.9.0
@antv/g-lottie-player1.2.1, 1.3.1
@antv/g-math3.2.0, 3.3.0
@antv/g-mobile1.2.5, 1.3.5
@antv/g-mobile-canvas1.2.1, 1.3.1
@antv/g-mobile-canvas-element1.1.42, 1.2.42
@antv/g-mobile-svg1.2.1, 1.3.1
@antv/g-mobile-webgl1.2.1, 1.3.1
@antv/g-pattern2.1.42, 2.2.42
@antv/g-perf1.1.0, 1.2.0
@antv/g-plugin-3d2.2.1, 2.3.1
@antv/g-plugin-a11y1.5.1, 1.6.1
@antv/g-plugin-annotation1.3.0, 1.4.0
@antv/g-plugin-box2d2.2.1, 2.3.1
@antv/g-plugin-canvas-path-generator2.2.26, 2.3.26
@antv/g-plugin-canvas-picker2.4.1, 2.5.1
@antv/g-plugin-canvas-renderer2.6.1, 2.7.1
@antv/g-plugin-canvaskit-renderer2.4.1, 2.5.1
@antv/g-plugin-control2.2.1, 2.3.1
@antv/g-plugin-css-select2.2.1, 2.3.1
@antv/g-plugin-device-renderer2.7.1, 2.8.1
@antv/g-plugin-dom-interaction2.2.31, 2.3.31
@antv/g-plugin-dragndrop2.2.1, 2.3.1
@antv/g-plugin-gesture2.2.1, 2.3.1
@antv/g-plugin-gpgpu1.10.20, 1.11.20
@antv/g-plugin-html-renderer2.4.1, 2.5.1
@antv/g-plugin-image-loader2.4.1, 2.5.1
@antv/g-plugin-matterjs2.2.1, 2.3.1
@antv/g-plugin-mobile-interaction1.1.42, 1.2.42
@antv/g-plugin-physx2.2.1, 2.3.1
@antv/g-plugin-rough-canvas-renderer2.2.1, 2.3.1
@antv/g-plugin-rough-svg-renderer2.2.1, 2.3.1
@antv/g-plugin-svg-picker2.1.46, 2.2.46
@antv/g-plugin-svg-renderer2.5.1, 2.6.1
@antv/g-plugin-webgl-device1.10.17, 1.11.17
@antv/g-plugin-webgl-renderer1.1.26, 1.2.26
@antv/g-plugin-webgpu-device1.10.17, 1.11.17
@antv/g-plugin-yoga2.4.1, 2.5.1
@antv/g-plugin-zdog-canvas-renderer2.2.1, 2.3.1
@antv/g-plugin-zdog-svg-renderer2.2.1, 2.3.1
@antv/g-shader-components2.1.0, 2.2.0
@antv/g-svg2.2.1, 2.3.1
@antv/g-web-animations-api2.2.32, 2.3.32
@antv/g-web-components2.2.1, 2.3.1
@antv/g-webgl2.2.1, 2.3.1
@antv/g-webgl-compute0.1.1, 0.2.1
@antv/g-webgpu2.2.1, 2.3.1
@antv/g-webgpu-compiler0.8.2, 0.9.2
@antv/g-webgpu-core0.8.2, 0.9.2
@antv/g-webgpu-engine0.8.2, 0.9.2
@antv/g-webgpu-raytracer0.6.1, 0.7.1
@antv/g-webgpu-unitchart0.6.1, 0.7.1
@antv/g25.5.8, 5.6.8
@antv/g2-brush0.1.2, 0.2.2
@antv/g2-extension-3d0.3.0, 0.4.0
@antv/g2-extension-ava0.3.0, 0.4.0
@antv/g2-extension-plot0.3.2, 0.4.2
@antv/g2-plugin-slider2.2.1, 2.3.1
@antv/g2-ssr0.3.0, 0.4.0
@antv/g2plot2.5.35, 2.6.35
@antv/g2plot-schemas1.3.2, 1.4.2
@antv/g65.2.1, 5.3.1
@antv/g6-alipay0.1.1, 0.2.1
@antv/g6-cli0.1.4, 0.2.4
@antv/g6-core0.9.24, 0.10.24
@antv/g6-editor1.3.0, 1.4.0
@antv/g6-element0.9.25, 0.10.25
@antv/g6-extension-3d0.2.23, 0.3.23
@antv/g6-extension-react0.3.7, 0.4.7
@antv/g6-mobile0.2.2, 0.3.2
@antv/g6-pc0.9.25, 0.10.25
@antv/g6-plugin0.9.25, 0.10.25
@antv/g6-plugin-map-view0.1.4, 0.2.4
@antv/g6-plugins1.1.9, 1.2.9
@antv/g6-react-node1.5.8, 1.6.8
@antv/g6-ssr0.2.1, 0.3.1
@antv/g6-wx0.1.1, 0.2.1
@antv/gatsby-theme0.2.0, 0.3.0
@antv/geo-coord1.1.8, 1.2.8
@antv/gi-assets-advance2.6.22, 2.7.22
@antv/gi-assets-algorithm2.4.19, 2.5.19
@antv/gi-assets-basic2.5.40, 2.6.40
@antv/gi-assets-galaxybase1.3.15, 1.4.15
@antv/gi-assets-graphscope2.2.15, 2.3.15
@antv/gi-assets-hugegraph1.2.15, 1.3.15
@antv/gi-assets-janusgraph1.2.15, 1.3.15
@antv/gi-assets-neo4j2.2.15, 2.3.15
@antv/gi-assets-scene2.3.21, 2.4.21
@antv/gi-assets-tugraph2.2.15, 2.3.15
@antv/gi-assets-tugraph-analytics0.3.15, 0.4.15
@antv/gi-assets-xlab0.2.30, 0.3.30
@antv/gi-cli1.3.11, 1.4.11
@antv/gi-common-components1.4.16, 1.5.16
@antv/gi-mock-data1.1.5, 1.2.5
@antv/gi-public-data1.1.1, 1.2.1
@antv/gi-sdk3.1.0, 3.2.0
@antv/gi-sdk-app1.3.10, 1.4.10
@antv/gi-theme-antd0.7.11, 0.8.11
@antv/github-config-cli0.2.0, 0.3.0
@antv/gl-matrix2.8.1, 2.9.1
@antv/gpt-vis1.1.0, 1.2.0
@antv/gpt-vis-ssr0.4.7, 0.5.7
@antv/graphin3.1.5, 3.2.5
@antv/graphin-components2.5.1, 2.6.1
@antv/graphin-graphscope1.1.5, 1.2.5
@antv/graphin-icons1.1.0, 1.2.0
@antv/graphlib2.1.4, 2.2.4
@antv/hierarchy0.8.1, 0.9.1
@antv/infographic0.3.19, 0.4.19
@antv/insight-component1.1.0, 1.2.0
@antv/interaction0.2.5, 0.3.5
@antv/istanbul0.1.0, 0.2.0
@antv/knowledge1.2.4, 1.3.4
@antv/l72.26.10, 2.27.10
@antv/l7-component2.26.10, 2.27.10
@antv/l7-composite-layers0.18.1, 0.19.1
@antv/l7-core2.26.10, 2.27.10
@antv/l7-district2.4.12, 2.5.12
@antv/l7-draw3.2.5, 3.3.5
@antv/l7-editor1.2.13, 1.3.13
@antv/l7-extension-g-layer1.1.0, 1.2.0
@antv/l7-layers2.26.10, 2.27.10
@antv/l7-leaflet1.1.2, 1.2.2
@antv/l7-map2.26.10, 2.27.10
@antv/l7-mapkit0.6.0, 0.7.0
@antv/l7-maps2.26.10, 2.27.10
@antv/l7-mini2.21.8, 2.22.8
@antv/l7-pass1.1.0, 1.2.0
@antv/l7-react2.5.3, 2.6.3
@antv/l7-renderer2.26.10, 2.27.10
@antv/l7-scene2.26.10, 2.27.10
@antv/l7-source2.26.10, 2.27.10
@antv/l7-three2.26.10, 2.27.10
@antv/l7-utils2.26.10, 2.27.10
@antv/l7plot0.6.11, 0.7.11
@antv/l7plot-component0.1.11, 0.2.11
@antv/larkmap1.6.1, 1.7.1
@antv/layout-gpu1.2.7, 1.3.7
@antv/layout-wasm1.5.2, 1.6.2
@antv/li-aiearth-assets0.5.7, 0.6.7
@antv/li-analysis-assets1.10.1, 1.11.1
@antv/li-core-assets1.4.7, 1.5.7
@antv/li-editor1.7.1, 1.8.1
@antv/li-p21.9.2, 1.10.2
@antv/li-sam-assets0.2.4, 0.3.4
@antv/li-sdk1.6.1, 1.7.1
@antv/lite-insight2.2.1, 2.3.1
@antv/matrix-util3.1.4, 3.2.4
@antv/mcp-server-antv0.2.8, 0.3.8
@antv/mcp-server-chart0.10.10, 0.11.10
@antv/my-f22.2.7, 2.3.7
@antv/my-f2-pc0.2.1, 0.3.1
@antv/narrative-text-editor0.3.20, 0.4.20
@antv/narrative-text-schema0.4.7, 0.5.7
@antv/narrative-text-vis0.4.16, 0.5.16
@antv/path-util3.1.1, 3.2.1
@antv/react-g2.2.1, 2.3.1
@antv/s22.8.1, 2.9.1
@antv/s2-react2.4.1, 2.5.1
@antv/s2-react-components2.2.2, 2.3.2
@antv/s2-ssr0.2.1, 0.3.1
@antv/s2-vue2.3.0, 2.4.0
@antv/sam0.3.0, 0.4.0
@antv/scale0.6.2, 0.7.2
@antv/semantic-release-pnpm1.1.4, 1.2.4
@antv/smart-color0.3.1, 0.4.1
@antv/stat0.1.2, 0.2.2
@antv/t80.4.0, 0.5.0
@antv/thumbnails2.1.0, 2.2.0
@antv/thumbnails-component2.1.0, 2.2.0
@antv/torch1.1.6, 1.2.6
@antv/translator1.1.1, 1.2.1
@antv/util3.4.11, 3.5.11
@antv/vendor1.1.11, 1.2.11
@antv/vis-predict-engine0.2.1, 0.3.1
@antv/webgpu-graph1.1.0, 1.2.0
@antv/word-scale-chart0.4.4, 0.5.4
@antv/wx-f22.2.1, 2.3.1
@antv/x63.2.7, 3.3.7
@antv/x6-angular-shape3.1.1, 3.2.1
@antv/x6-common2.1.17, 2.2.17
@antv/x6-components0.11.7, 0.12.7
@antv/x6-geometry2.1.5, 2.2.5
@antv/x6-plugin-clipboard2.2.6, 2.3.6
@antv/x6-plugin-dnd2.2.1, 2.3.1
@antv/x6-plugin-export2.2.6, 2.3.6
@antv/x6-plugin-history2.3.4, 2.4.4
@antv/x6-plugin-keyboard2.3.3, 2.4.3
@antv/x6-plugin-minimap2.1.7, 2.2.7
@antv/x6-plugin-scroller2.1.10, 2.2.10
@antv/x6-plugin-selection2.3.2, 2.4.2
@antv/x6-plugin-snapline2.2.7, 2.3.7
@antv/x6-plugin-stencil2.2.5, 2.3.5
@antv/x6-plugin-transform2.2.8, 2.3.8
@antv/x6-react0.2.26, 0.3.26
@antv/x6-react-components2.1.9, 2.2.9
@antv/x6-react-shape3.1.1, 3.2.1
@antv/x6-vector1.5.2, 1.6.2
@antv/x6-vue-shape3.1.2, 3.2.2
@antv/x6-vue3-shape1.1.0, 1.2.0
@antv/xflow2.2.13, 2.3.13
@antv/xflow-core1.1.55, 1.2.55
@antv/xflow-diff1.1.0, 1.2.0
@antv/xflow-extension1.1.55, 1.2.55
@antv/xflow-hook1.1.55, 1.2.55
@lint-md/cli2.1.0, 2.2.0
@lint-md/core2.1.0, 2.2.0
@lint-md/parser0.1.14, 0.2.14
@openclaw-cn/cli1.4.1
@openclaw-cn/feishu0.2.11
@openclaw-cn/libsignal2.1.1
@openclaw-cn/toutiao-ops1.2.4
@starmind/collector-cli0.3.10
ai-figure0.5.0, 0.6.0
amapcn0.2.2, 0.3.2
ast-plugin0.1.7, 0.2.7
babel-plugin-version0.3.3, 0.4.3
boring-avatars-vanilla1.1.2, 1.2.2
byte-parser1.1.0, 1.2.0
canvas-nest.js2.1.4, 2.2.4
echarts-for-react3.1.7, 3.2.7
filesize.js2.1.0, 2.2.0
fixed-round1.1.2, 1.2.2
gantt-for-react0.3.0, 0.4.0
jest-canvas-mock2.6.3, 2.7.3
jest-date-mock1.1.11, 1.2.11
jest-electron0.2.12, 0.3.12
jest-expect0.1.1, 0.2.1
jest-less-loader0.3.0, 0.4.0
jest-random-mock1.1.0, 1.2.0
jest-url-loader0.2.0, 0.3.0
limit-size0.2.4, 0.3.4
lint-md0.3.0, 0.4.0
lint-md-cli0.2.2, 0.3.2
mcp-echarts0.8.1, 0.9.1
mcp-mermaid0.5.1, 0.6.1
miz1.1.1, 1.2.1
nrwl.angular-console18.95.0
onfire.js2.1.1, 2.2.1
openclaw-cn0.3.0
react-adsense0.2.0, 0.3.0
relationship.js1.3.9, 1.4.9
ribbon.js1.1.2
size-sensor1.1.4, 1.2.4
slice.js1.2.1, 1.3.1
timeago-react3.1.7, 3.2.7
timeago.js4.1.2, 4.2.2
uri-parse1.1.0, 1.2.0
word-width1.1.1, 1.2.1
xmorse1.1.0, 1.2.0

Continue reading

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management