Detection rules › Sigma

LiteLLM / TeamPCP Supply Chain Attack Indicators

Status
experimental
Severity
high
Log source
product linux, category process_creation
Author
Swachchhanda Shrawan Poudel (Nextron Systems)
Source
github.com/SigmaHQ/sigma

Detects process executions related to the backdoored versions of LiteLLM (v1.82.7 or v1.82.8). In March 2026, a supply chain attack was discovered involving the popular open-source LLM framework LiteLLM by Threat Actor TeamPCP. The malicious package harvests every credential on the system, encrypts and exfiltrates them, and installs a persistent C2 backdoor.

MITRE ATT&CK coverage

Event coverage

Rule body yaml

title: LiteLLM / TeamPCP Supply Chain Attack Indicators
id: 36603778-030c-43c4-8cbb-cd3c1d1a80c7
status: experimental
description: |
    Detects process executions related to the backdoored versions of LiteLLM (v1.82.7 or v1.82.8).
    In March 2026, a supply chain attack was discovered involving the popular open-source LLM framework LiteLLM by Threat Actor TeamPCP.
    The malicious package harvests every credential on the system, encrypts and exfiltrates them, and installs a persistent C2 backdoor.
references:
    - https://novasky.io/hunts/hunting-litellm-supply-chain
    - https://www.virustotal.com/gui/file/71e35aef03099cd1f2d6446734273025a163597de93912df321ef118bf135238/
    - https://huskyhacks.io/posts/litellm-cred-stealer/
    - https://www.wiz.io/blog/threes-a-crowd-teampcp-trojanizes-litellm-in-continuation-of-campaign
author: Swachchhanda Shrawan Poudel (Nextron Systems)
date: 2026-03-30
tags:
    - attack.initial-access
    - attack.t1195.002
    - attack.collection
    - attack.t1560.001
    - attack.persistence
    - attack.privilege-escalation
    - attack.t1543.002
    - detection.emerging-threats
logsource:
    category: process_creation
    product: linux
detection:
    selection_pth_package:
        # Execution of .pth file
        Image|contains: '/python3'
        CommandLine|contains|all:
            - "exec(base64.b64decode('aW1wb3J0"
            - "kI2NF9TQ1JJUFQgPSAiYV"
    selection_tar:
        Image|endswith: '/tar'
        CommandLine|contains|all:
            - 'tpcp.tar.gz'
            - 'payload.enc'
            - 'session.key.enc'
    selection_curl:
        Image|endswith: '/curl'
        CommandLine|contains|all:
            - 'models.litellm.cloud'
            - 'X-Filename: tpcp.tar.gz'
    selection_sysmon_service:
        ParentImage|contains: '/python3'
        CommandLine|contains|all:
            - 'systemctl'
            - '--user'
            - 'sysmon'
    condition: 1 of selection_*
falsepositives:
    - Unknown
level: high

Stages and Predicates

Stage 0: condition

1 of selection_*

Stage 1: selection_pth_package

selection_pth_package:
    Image|contains: '/python3'
    CommandLine|contains|all:
        - "exec(base64.b64decode('aW1wb3J0"
        - "kI2NF9TQ1JJUFQgPSAiYV"

Stage 2: selection_tar

selection_tar:
    Image|endswith: '/tar'
    CommandLine|contains|all:
        - 'tpcp.tar.gz'
        - 'payload.enc'
        - 'session.key.enc'

Stage 3: selection_curl

selection_curl:
    Image|endswith: '/curl'
    CommandLine|contains|all:
        - 'models.litellm.cloud'
        - 'X-Filename: tpcp.tar.gz'

Stage 4: selection_sysmon_service

selection_sysmon_service:
    ParentImage|contains: '/python3'
    CommandLine|contains|all:
        - 'systemctl'
        - '--user'
        - 'sysmon'

Indicators

Each row is a field, operator, and value that the rule matches. The corpus column counts how many other rules in the catalog look for the same combination: high numbers point to widely-used, community-vetted indicators. Blank or 1 shows that the indicator is specific to this rule.

FieldKindValues
CommandLinematch
  • --user
  • X-Filename: tpcp.tar.gz
  • exec(base64.b64decode('aW1wb3J0
  • kI2NF9TQ1JJUFQgPSAiYV
  • models.litellm.cloud
  • payload.enc
  • session.key.enc
  • sysmon
  • systemctl
  • tpcp.tar.gz
Imageends_with
  • /curl
  • /tar
Imagematch
  • /python3
ParentImagematch
  • /python3