Back to Intelligence

Lazarus Group 'June 2026 Minjun' Campaign: PHP2Shell Web Shell Exploitation of Global PHP Infrastructure — OTX Pulse Analysis & Detection Pack

SA
Security Arsenal Team
October 26, 2026
11 min read

The AlienVault OTX pulse reveals an active, planned campaign attributed with moderate confidence to the Democratic People's Republic of Korea (DPRK) state-sponsored actor Lazarus Group. Internally tracked as the 'June 2026 Minjun' campaign, this operation targets the global attack surface of internet-facing PHP infrastructure through the imminent exploitation of two critical, unauthenticated remote code execution vulnerabilities: CVE-2026-109618 and CVE-2026-109619.

The adversary's objective is systematic, wide-scale compromise of web servers to establish persistent footholds. The attack chain is designed for initial access brokering and follow-on espionage or financial theft. By exploiting these pre-authentication PHP flaws, the actor can deploy the PHP2Shell web shell family, granting them interactive command execution on the underlying host. This transforms vulnerable web servers into beachheads for lateral movement into core network segments.

The targeting is opportunistic yet sector-focused, prioritizing government agencies, financial institutions, and critical manufacturing/logistics entities across a broad geographic swath including the United States, Japan, Singapore, and the Middle East. This indicates a strategic intent to infiltrate supply chains and exfiltrate sensitive data or deploy ransomware at a later stage.

Threat Actor / Malware Profile

Adversary: Lazarus Group (aka Diamond Sleet, TEMP.Hermit)
Campaign: June 2026 Minjun
Primary Payload: PHP2Shell Web Shell
Initial Access Vector: Unauthenticated RCE via CVE-2026-109618 & CVE-2026-109619 in public-facing PHP applications.

Attack Chain & Behavior:

  1. Distribution & Exploitation: The actor conducts mass scanning to identify vulnerable PHP versions and frameworks. Exploitation is silent and does not require user interaction, delivering the PHP2Shell payload directly to the web server's root or writeable directories (e.g., /uploads/, /tmp/).
  2. Payload Behavior (PHP2Shell): This is a lightweight, obfuscated PHP script designed for stealth. It provides a web-based GUI or API for the attacker to execute system commands (system(), exec(), shell_exec()), browse the filesystem, and upload additional tools. It often masquerades as legitimate image or documentation files (e.g., config.jpg.php, readme.txt).
  3. C2 Communication: The listed IPv4 indicators (e.g., 92.118.112.100, 185.235.212.105) serve as the primary C2 layer. Communication is typically over HTTP/S, blending with legitimate web traffic. The web shell makes outbound POST requests to these IPs to beacon, receive tasking, and exfiltrate data in encrypted chunks.
  4. Persistence Mechanism: Beyond the web shell itself, Lazarus operators establish secondary persistence by creating malicious PHP files in multiple web-accessible locations and modifying legitimate PHP configuration files (.user.ini, php.ini) to auto-prepend backdoors. They may also deploy scheduled tasks (Cron jobs on Linux) to re-download the web shell if removed.
  5. Anti-Analysis Techniques: PHP2Shell employs base64 encoding and XOR obfuscation to hide its code. It checks for the presence of common security tools and sandboxes, and may only execute fully when accessed with a specific, attacker-controlled HTTP header or cookie.

IOC Analysis

The OTX pulse provides 27 network-based indicators, all IPv4 addresses. These are confirmed or suspected command-and-control (C2) servers and potential staging grounds for the PHP2Shell campaign.

  • Indicator Type: IPv4 Addresses
  • Context: These IPs are the communication endpoints for compromised web shells. They host the C2 panels that receive beacons and issue commands.
  • SOC Operationalization:
    • Immediate Action: Ingest all 27 IPs into your SIEM, EDR, and firewall blocklists. Prioritize blocking at the network perimeter (ingress/egress).
    • Threat Hunting: Proactively search historical proxy, firewall, and DNS logs for any connections to these IPs. A single connection warrants a full host forensic investigation.
    • Tooling: Utilize network intrusion detection systems (IDS) with custom rules (see below). Employ threat intelligence platforms (TIPs) like Anomali or ThreatConnect to correlate these IPs with internal telemetry. For decoding web shell traffic, tools like Wireshark with TLS decryption (if possible) or Zeek (Bro) network analysis framework are essential to inspect HTTP payloads for obfuscated commands.

Detection Engineering

Sigma Rules

YAML
---
title: Lazarus PHP2Shell Web Shell Creation via PHP Process
id: 9a7f4b3a-4e6d-4c3a-8b3e-7f8e9d0c1a2b
status: experimental
description: Detects the creation of suspicious PHP files in web-accessible directories, a key indicator of PHP2Shell deployment following CVE-2026-109618 exploitation.
author: Security Arsenal
date: 2026/10/27
references:
    - https://otx.alienvault.com/pulse/...
logsource:
    product: linux
    service: auditd
    # For Windows, use product: windows, category: file_event
detection:
    selection_paths:
        file_path:
            - '/var/www/html/*'
            - '/var/www/*/html/*'
            - '/usr/share/nginx/html/*'
            - '/opt/lampp/htdocs/*'
            - '/tmp/*'
            - '/uploads/*'
    selection_extensions:
        file_name|endswith:
            - '.php'
            - '.phtml'
            - '.php3'
            - '.php4'
            - '.php5'
            - '.php7'
            - '.phar'
    selection_suspicious_names:
        file_name|contains:
            - 'config.'
            - 'readme.'
            - 'upload.'
            - 'session.'
            - 'log.'
            - 'image.'
    condition: selection_paths and selection_extensions and selection_suspicious_names
falsepositives:
    - Legitimate file uploads by administrators
    - CMS/plugin updates
level: high
tags:
    - attack.persistence
    - attack.t1505.003  # Web Shell
    - attack.t1027      # Obfuscated Files or Information
---
title: Outbound C2 Beacon to Lazarus PHP2Shell Infrastructure
id: 8b8c7d6e-5f4e-4d3c-2b1a-0e9f8d7c6b5a
status: experimental
description: Identifies network connections to known Lazarus Group PHP2Shell C2 IP addresses.
author: Security Arsenal
date: 2026/10/27
references:
    - https://otx.alienvault.com/pulse/...
logsource:
    category: network_connection
    # or firewall, proxy
detection:
    selection_dst_ip:
        dst_ip:
            - '92.118.112.100'
            - '119.63.72.54'
            - '185.235.212.105'
            - '103.77.210.80'
            - '185.203.18.54'
            - '188.80.228.122'
            - '147.78.168.57'
            - '158.173.75.178'
    selection_protocol:
        protocol: 'tcp'
        dst_port:
            - 80
            - 443
            - 8080
    condition: selection_dst_ip and selection_protocol
falsepositives:
    - Internal IP ranges misconfigured
    - Legitimate services on these IPs (unlikely for known C2)
level: critical
tags:
    - attack.command_and_control
    - attack.t1071.001  # Web Protocols
    - attack.t1573      # Encrypted Channel
---
title: PHP Process Spawning Suspicious Child Processes
id: 7c6d5e4f-3a2b-1c9d-8e7f-6a5b4c3d2e1f
status: experimental
description: Detects web server PHP processes executing system commands, a behavior consistent with PHP2Shell web shell activity.
author: Security Arsenal
date: 2026/10/27
logsource:
    category: process_creation
    product: windows
    # For Linux, use product: linux, service: execve
detection:
    selection_parent:
        ParentImage|endswith:
            - '\php.exe'
            - '\php-cgi.exe'
            - '\php-fpm'
    selection_child:
        Image|endswith:
            - '\cmd.exe'
            - '\powershell.exe'
            - '\whoami.exe'
            - '\net.exe'
            - '\systeminfo.exe'
            - '\curl.exe'
            - '\wget.exe'
    condition: selection_parent and selection_child
falsepositives:
    - Legitimate PHP applications that execute system commands (rare, should be tuned)
    - Web management panels
level: high
tags:
    - attack.execution
    - attack.t1059.004  # Unix Shell (on Linux variant)
    - attack.t1059.001  # PowerShell
    - attack.t1059.003  # Windows Command Shell

KQL (Microsoft Sentinel) Hunt Query

KQL — Microsoft Sentinel / Defender
// Hunt for PHP2Shell web shell indicators and C2 communication in the last 7 days
let c2_ips = dynamic(["92.118.112.100","119.63.72.54","185.235.212.105","103.77.210.80","185.203.18.54","188.80.228.122","147.78.168.57","158.173.75.178"]);
// Hunt 1: Network connections to known C2 IPs
DeviceNetworkEvents
| where TimeGenerated > ago(7d)
| where RemoteIP in (c2_ips)
| where RemotePort in (80, 443, 8080)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, RemoteIP, RemotePort, ActionType
| extend ActionType = iff(ActionType == "ConnectionSuccess", "SUCCESSFUL", ActionType)
| sort by TimeGenerated desc;
// Hunt 2: Suspicious PHP file creation in web directories
DeviceFileEvents
| where TimeGenerated > ago(7d)
| where FolderPath has_any ("/var/www/html", "/var/www", "/usr/share/nginx/html", "/tmp", "/uploads")
| where FileName endswith ".php" or FileName endswith ".phtml"
| where FileName contains "config" or FileName contains "readme" or FileName contains "upload"
| project TimeGenerated, DeviceName, FolderPath, FileName, InitiatingProcessFileName, InitiatingProcessCommandLine, SHA256
| sort by TimeGenerated desc;
// Hunt 3: PHP process spawning command shells
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName =~ "php.exe" or InitiatingProcessFileName =~ "php-cgi.exe" or InitiatingProcessFileName =~ "php-fpm"
| where FileName in~ ("cmd.exe", "powershell.exe", "whoami.exe", "net.exe")
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, FileName, ProcessCommandLine, AccountName
| sort by TimeGenerated desc;

Bash IOC Hunt Script for Linux Web Servers

Bash / Shell
#!/bin/bash
# Security Arsenal - Lazarus PHP2Shell IOC Hunter v1.0
# Description: Scans Linux web servers for indicators of PHP2Shell web shell deployment and C2 activity.
# Author: Security Arsenal SOC
# Date: 2026-10-27

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

C2_IPS=("92.118.112.100" "119.63.72.54" "185.235.212.105" "103.77.210.80" "185.203.18.54" "188.80.228.122" "147.78.168.57" "158.173.75.178")
WEB_DIRS=("/var/www/html" "/var/www" "/usr/share/nginx/html" "/opt/lampp/htdocs" "/home/*/public_html")
SUSPICIOUS_PHP_NAMES=("config" "readme" "upload" "session" "log" "image" "tmp" "cache")

echo -e "${YELLOW}[*] Starting Lazarus PHP2Shell Hunt on $(hostname)...${NC}"
echo "=================================================="

# Check for outbound connections to C2 IPs
echo -e "\n${YELLOW}[1] Checking for active/historical connections to C2 IPs...${NC}"
for ip in "${C2_IPS[@]}"; do
    # Check current connections
    if netstat -tuln 2>/dev/null | grep -q "$ip"; then
        echo -e "${RED}[!] ACTIVE connection to C2 IP: $ip${NC}"
        netstat -tulnp | grep "$ip"
    fi
    # Check connection logs (if conntrack or similar is used)
    if grep -q "$ip" /var/log/syslog 2>/dev/null || grep -q "$ip" /var/log/messages 2>/dev/null; then
        echo -e "${RED}[!] Historical connection to C2 IP: $ip found in logs${NC}"
        grep "$ip" /var/log/syslog* /var/log/messages* 2>/dev/null | tail -5
    fi
done

# Search for suspicious PHP files in web directories
echo -e "\n${YELLOW}[2] Searching for suspicious PHP files in web directories...${NC}"
for dir in "${WEB_DIRS[@]}"; do
    if [ -d "$dir" ]; then
        echo "Scanning: $dir"
        find "$dir" -type f \( -name "*.php" -o -name "*.phtml" -o -name "*.phar" \) -mtime -7 2>/dev/null | while read file; do
            filename=$(basename "$file")
            for susp_name in "${SUSPICIOUS_PHP_NAMES[@]}"; do
                if [[ "$filename" == *"$susp_name"* ]]; then
                    # Check file size (web shells are often small)
                    filesize=$(stat -c%s "$file" 2>/dev/null)
                    if [ "$filesize" -lt 50000 ]; then
                        echo -e "${RED}[!] Suspicious PHP file found: $file (Size: $filesize bytes)${NC}"
                        echo "    First 5 lines:"
                        head -5 "$file" 2>/dev/null | sed 's/^/    /'
                        echo ""
                    fi
                    break
                fi
            done
        done
    fi
done

# Check for recently modified PHP files in temp directories
echo -e "\n${YELLOW}[3] Checking /tmp and /var/tmp for recent PHP files...${NC}"
find /tmp /var/tmp -type f -name "*.php" -mtime -2 2>/dev/null | while read file; do
    echo -e "${RED}[!] Recent PHP file in temp dir: $file${NC}"
    file "$file"
    head -3 "$file" 2>/dev/null | sed 's/^/    /'
    echo ""
done

# Check for PHP processes with suspicious command lines
echo -e "\n${YELLOW}[4] Checking for PHP processes with suspicious command lines...${NC}"
ps aux | grep -E "(php|php-fpm)" | grep -v grep | while read line; do
    if echo "$line" | grep -qE "(base64|eval|shell_exec|system|exec)"; then
        echo -e "${RED}[!] Suspicious PHP process: $line${NC}"
    fi
done

# Check web server access logs for exploitation attempts
echo -e "\n${YELLOW}[5] Checking web server access logs for exploitation patterns...${NC}"
ACCESS_LOGS=("/var/log/apache2/access.log" "/var/log/nginx/access.log" "/var/log/httpd/access_log")
for log in "${ACCESS_LOGS[@]}"; do
    if [ -f "$log" ]; then
        echo "Scanning: $log"
        # Look for patterns associated with CVE exploitation or web shell access
        grep -E "(CVE-2026-109618|CVE-2026-109619|php2shell|\.php\?.*=|base64_decode|eval\()" "$log" 2>/dev/null | tail -10 | while read logline; do
            echo -e "${YELLOW}[*] Potential exploit/web shell access: $logline${NC}"
        done
    fi
done

echo -e "\n${GREEN}[*] Hunt completed. Review any RED alerts immediately.${NC}"
echo -e "${YELLOW}[*] If suspicious files or connections are found, isolate the host and begin forensic acquisition.${NC}"

# Optional: Auto-quarantine mode (uncomment with extreme caution)
# echo -e "${YELLOW}[*] Auto-quarantine mode would move suspicious files to /quarantine/${NC}"
# mkdir -p /quarantine
# for file in $(find /var/www/html /tmp -name "*.php" -mtime -1 2>/dev/null); do
#     mv "$file" /quarantine/ 2>/dev/null && echo "Moved $file to /quarantine/"
# done

Response Priorities

Immediate (0-4 hours):

  • Network Blocking: Immediately implement blocking for all 27 IPv4 indicators at the network perimeter (firewalls, web proxies, DNS sinkholes). This is a critical containment step.
  • Threat Hunt Initiation: Launch the provided KQL and Bash hunt queries across your entire web server estate and network logs. Identify any host that has communicated with a C2 IP.
  • Asset Inventory: Identify all internet-facing PHP applications and their versions. This is your vulnerable attack surface.

24 Hours:

  • Emergency Patching: If CVE-2026-109618 and CVE-2026-109619 patches are available, apply them immediately to all internet-facing systems. If not, deploy virtual patching via WAF rules to block exploitation attempts.
  • Compromise Assessment: For any host with a confirmed C2 connection or a suspicious PHP file, initiate a full forensic investigation. Assume the host is fully compromised.
  • Credential Reset: Force password resets for all administrative accounts on potentially affected web servers and any accounts that were active on those systems. Web shells can be used to harvest credentials from memory or configuration files.

1 Week:

  • Architecture Hardening:
    • Segmentation: Isolate web servers in a dedicated DMZ with strict egress filtering. They should not be able to initiate arbitrary connections to the internal network.
    • WAF Tuning: Deploy or tune Web Application Firewall rules to detect and block PHP code injection attempts and anomalous file uploads.
    • File Integrity Monitoring (FIM): Implement FIM on web root directories to alert on any unauthorized file creation or modification.
  • Detection Rule Deployment: Deploy the Sigma rules into your SIEM/EDR and ensure they are tuned to reduce false positives in your environment.
  • Threat Intelligence Integration: Automate the ingestion of OTX pulses and other TI feeds into your security controls to stay ahead of emerging Lazarus Group infrastructure.

Related Resources

Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.