CVE Vulnerabilities

CVE-2019-19282

Incorrect Calculation of Buffer Size

Published: Mar 10, 2020 | Modified: Apr 11, 2023
CVSS 3.x
7.5
HIGH
Source:
NVD
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
CVSS 2.x
7.1 HIGH
AV:N/AC:M/Au:N/C:N/I:N/A:C
RedHat/V2
RedHat/V3
Ubuntu

A vulnerability has been identified in OpenPCS 7 V8.1 (All versions), OpenPCS 7 V8.2 (All versions), OpenPCS 7 V9.0 (All versions < V9.0 Upd3), SIMATIC BATCH V8.1 (All versions), SIMATIC BATCH V8.2 (All versions < V8.2 Upd12), SIMATIC BATCH V9.0 (All versions < V9.0 SP1 Upd5), SIMATIC NET PC Software V14 (All versions < V14 SP1 Update 14), SIMATIC NET PC Software V15 (All versions), SIMATIC NET PC Software V16 (All versions < V16 Update 1), SIMATIC PCS 7 V8.1 (All versions), SIMATIC PCS 7 V8.2 (All versions), SIMATIC PCS 7 V9.0 (All versions < V9.0 SP3), SIMATIC Route Control V8.1 (All versions), SIMATIC Route Control V8.2 (All versions), SIMATIC Route Control V9.0 (All versions < V9.0 Upd4), SIMATIC WinCC (TIA Portal) V13 (All versions < V13 SP2), SIMATIC WinCC (TIA Portal) V14 (All versions < V14 SP1 Update 10), SIMATIC WinCC (TIA Portal) V15.1 (All versions < V15.1 Update 5), SIMATIC WinCC (TIA Portal) V16 (All versions < V16 Update 1), SIMATIC WinCC V7.3 (All versions), SIMATIC WinCC V7.4 (All versions < V7.4 SP1 Update 14), SIMATIC WinCC V7.5 (All versions < V7.5 SP1 Update 1). Through specially crafted messages, when encrypted communication is enabled, an attacker with network access could use the vulnerability to compromise the availability of the system by causing a Denial-of-Service condition. Successful exploitation requires no system privileges and no user interaction.

Weakness

The product does not correctly calculate the size to be used when allocating a buffer, which could lead to a buffer overflow.

Affected Software

Name Vendor Start Version End Version
Openpcs_7 Siemens 9.0 (including) 9.0 (including)
Openpcs_7 Siemens 9.0_update_1 (including) 9.0_update_1 (including)
Simatic_batch Siemens 9.0 (including) 9.0 (including)
Simatic_batch Siemens 9.0-sp1 (including) 9.0-sp1 (including)
Simatic_batch Siemens 9.0-sp1_update_1 (including) 9.0-sp1_update_1 (including)
Simatic_batch Siemens 9.0-sp1_update_2 (including) 9.0-sp1_update_2 (including)
Simatic_batch Siemens 9.0-sp1_update_3 (including) 9.0-sp1_update_3 (including)
Simatic_batch Siemens 9.0-sp1_update_4 (including) 9.0-sp1_update_4 (including)
Simatic_net_pc Siemens * 16 (excluding)
Simatic_net_pc Siemens 16 (including) 16 (including)
Simatic_pcs_7 Siemens 8.1 (including) 8.1 (including)
Simatic_pcs_7 Siemens 8.2 (including) 8.2 (including)
Simatic_pcs_7 Siemens 9.0 (including) 9.0 (including)
Simatic_pcs_7 Siemens 9.0-sp1 (including) 9.0-sp1 (including)
Simatic_pcs_7 Siemens 9.0-sp2 (including) 9.0-sp2 (including)
Simatic_route_control Siemens * 9.0 (excluding)
Simatic_route_control Siemens 9.0 (including) 9.0 (including)
Simatic_wincc Siemens 7.4 (including) 7.4 (including)
Simatic_wincc Siemens 7.4-sp1 (including) 7.4-sp1 (including)
Simatic_wincc Siemens 7.4-sp1_update_1 (including) 7.4-sp1_update_1 (including)
Simatic_wincc Siemens 7.4-sp1_update_10 (including) 7.4-sp1_update_10 (including)
Simatic_wincc Siemens 7.4-sp1_update_11 (including) 7.4-sp1_update_11 (including)
Simatic_wincc Siemens 7.4-sp1_update_12 (including) 7.4-sp1_update_12 (including)
Simatic_wincc Siemens 7.4-sp1_update_13 (including) 7.4-sp1_update_13 (including)
Simatic_wincc Siemens 7.4-sp1_update_2 (including) 7.4-sp1_update_2 (including)
Simatic_wincc Siemens 7.4-sp1_update_3 (including) 7.4-sp1_update_3 (including)
Simatic_wincc Siemens 7.4-sp1_update_4 (including) 7.4-sp1_update_4 (including)
Simatic_wincc Siemens 7.4-sp1_update_5 (including) 7.4-sp1_update_5 (including)
Simatic_wincc Siemens 7.4-sp1_update_6 (including) 7.4-sp1_update_6 (including)
Simatic_wincc Siemens 7.4-sp1_update_7 (including) 7.4-sp1_update_7 (including)
Simatic_wincc Siemens 7.4-sp1_update_8 (including) 7.4-sp1_update_8 (including)
Simatic_wincc Siemens 7.4-sp1_update_9 (including) 7.4-sp1_update_9 (including)
Simatic_wincc Siemens 7.5 (including) 7.5 (including)
Simatic_wincc Siemens 7.5-sp1 (including) 7.5-sp1 (including)
Simatic_wincc Siemens 7.5.1 (including) 7.5.1 (including)
Simatic_wincc Siemens 13 (including) 13 (including)
Simatic_wincc Siemens 13-sp1 (including) 13-sp1 (including)
Simatic_wincc Siemens 14.0.1 (including) 14.0.1 (including)
Simatic_wincc Siemens 15.1 (including) 15.1 (including)
Simatic_wincc Siemens 15.1-update_1 (including) 15.1-update_1 (including)
Simatic_wincc Siemens 15.1-update_2 (including) 15.1-update_2 (including)
Simatic_wincc Siemens 15.1-update_3 (including) 15.1-update_3 (including)
Simatic_wincc Siemens 15.1-update_4 (including) 15.1-update_4 (including)
Simatic_wincc Siemens 16 (including) 16 (including)

Potential Mitigations

  • Understand the programming language’s underlying representation and how it interacts with numeric calculation (CWE-681). Pay close attention to byte size discrepancies, precision, signed/unsigned distinctions, truncation, conversion and casting between types, “not-a-number” calculations, and how the language handles numbers that are too large or too small for its underlying representation. [REF-7]
  • Also be careful to account for 32-bit, 64-bit, and other potential differences that may affect the numeric representation.
  • Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.
  • Use libraries or frameworks that make it easier to handle numbers without unexpected consequences, or buffer allocation routines that automatically track buffer size.
  • Examples include safe integer handling packages such as SafeInt (C++) or IntegerLib (C or C++). [REF-106]
  • Use automatic buffer overflow detection mechanisms that are offered by certain compilers or compiler extensions. Examples include: the Microsoft Visual Studio /GS flag, Fedora/Red Hat FORTIFY_SOURCE GCC flag, StackGuard, and ProPolice, which provide various mechanisms including canary-based detection and range/index checking.
  • D3-SFCV (Stack Frame Canary Validation) from D3FEND [REF-1334] discusses canary-based detection in detail.
  • Run or compile the software using features or extensions that randomly arrange the positions of a program’s executable and libraries in memory. Because this makes the addresses unpredictable, it can prevent an attacker from reliably jumping to exploitable code.
  • Examples include Address Space Layout Randomization (ASLR) [REF-58] [REF-60] and Position-Independent Executables (PIE) [REF-64]. Imported modules may be similarly realigned if their default memory addresses conflict with other modules, in a process known as “rebasing” (for Windows) and “prelinking” (for Linux) [REF-1332] using randomly generated addresses. ASLR for libraries cannot be used in conjunction with prelink since it would require relocating the libraries at run-time, defeating the whole purpose of prelinking.
  • For more information on these techniques see D3-SAOR (Segment Address Offset Randomization) from D3FEND [REF-1335].
  • Use a CPU and operating system that offers Data Execution Protection (using hardware NX or XD bits) or the equivalent techniques that simulate this feature in software, such as PaX [REF-60] [REF-61]. These techniques ensure that any instruction executed is exclusively at a memory address that is part of the code segment.
  • For more information on these techniques see D3-PSEP (Process Segment Execution Prevention) from D3FEND [REF-1336].
  • Run the code in a “jail” or similar sandbox environment that enforces strict boundaries between the process and the operating system. This may effectively restrict which files can be accessed in a particular directory or which commands can be executed by the software.
  • OS-level examples include the Unix chroot jail, AppArmor, and SELinux. In general, managed code may provide some protection. For example, java.io.FilePermission in the Java SecurityManager allows the software to specify restrictions on file operations.
  • This may not be a feasible solution, and it only limits the impact to the operating system; the rest of the application may still be subject to compromise.
  • Be careful to avoid CWE-243 and other weaknesses related to jails.

References