CVE Vulnerabilities

CVE-2021-22790

Out-of-bounds Read

Published: Sep 02, 2021 | Modified: Sep 13, 2021
CVSS 3.x
6.5
MEDIUM
Source:
NVD
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
CVSS 2.x
4 MEDIUM
AV:N/AC:L/Au:S/C:N/I:N/A:P
RedHat/V2
RedHat/V3
Ubuntu

A CWE-125: Out-of-bounds Read vulnerability that could cause a Denial of Service on the Modicon PLC controller / simulator when updating the controller application with a specially crafted project file exists in Modicon M580 CPU (part numbers BMEP* and BMEH*, all versions), Modicon M340 CPU (part numbers BMXP34*, all versions), Modicon MC80 (part numbers BMKC80*, all versions), Modicon Momentum Ethernet CPU (part numbers 171CBU*, all versions), PLC Simulator for EcoStruxureª Control Expert, including all Unity Pro versions (former name of EcoStruxureª Control Expert, all versions), PLC Simulator for EcoStruxureª Process Expert including all HDCS versions (former name of EcoStruxureª Process Expert, all versions), Modicon Quantum CPU (part numbers 140CPU*, all versions), Modicon Premium CPU (part numbers TSXP5*, all versions).

Weakness

The product reads data past the end, or before the beginning, of the intended buffer.

Affected Software

Name Vendor Start Version End Version
Modicon_m340_bmxp341000 Schneider-electric - (including) - (including)
Modicon_m340_bmxp342010 Schneider-electric - (including) - (including)
Modicon_m340_bmxp342020 Schneider-electric - (including) - (including)
Modicon_m340_bmxp342030 Schneider-electric - (including) - (including)
Modicon_m580_bmeh582040 Schneider-electric - (including) - (including)
Modicon_m580_bmeh582040c Schneider-electric - (including) - (including)
Modicon_m580_bmeh582040s Schneider-electric - (including) - (including)
Modicon_m580_bmeh584040 Schneider-electric - (including) - (including)
Modicon_m580_bmeh584040c Schneider-electric - (including) - (including)
Modicon_m580_bmeh584040s Schneider-electric - (including) - (including)
Modicon_m580_bmeh586040 Schneider-electric - (including) - (including)
Modicon_m580_bmeh586040c Schneider-electric - (including) - (including)
Modicon_m580_bmeh586040s Schneider-electric - (including) - (including)
Modicon_m580_bmep581020 Schneider-electric - (including) - (including)
Modicon_m580_bmep581020h Schneider-electric - (including) - (including)
Modicon_m580_bmep582020 Schneider-electric - (including) - (including)
Modicon_m580_bmep582020h Schneider-electric - (including) - (including)
Modicon_m580_bmep582040 Schneider-electric - (including) - (including)
Modicon_m580_bmep582040h Schneider-electric - (including) - (including)
Modicon_m580_bmep582040s Schneider-electric - (including) - (including)
Modicon_m580_bmep583020 Schneider-electric - (including) - (including)
Modicon_m580_bmep583040 Schneider-electric - (including) - (including)
Modicon_m580_bmep584020 Schneider-electric - (including) - (including)
Modicon_m580_bmep584040 Schneider-electric - (including) - (including)
Modicon_m580_bmep584040s Schneider-electric - (including) - (including)
Modicon_m580_bmep585040 Schneider-electric - (including) - (including)
Modicon_m580_bmep585040c Schneider-electric - (including) - (including)
Modicon_m580_bmep586040 Schneider-electric - (including) - (including)
Modicon_m580_bmep586040c Schneider-electric - (including) - (including)
Modicon_mc80_bmkc8020301 Schneider-electric - (including) - (including)
Modicon_mc80_bmkc8020310 Schneider-electric - (including) - (including)
Modicon_mc80_bmkc8030311 Schneider-electric - (including) - (including)
Modicon_momentum_171cbu78090 Schneider-electric - (including) - (including)
Modicon_momentum_171cbu98090 Schneider-electric - (including) - (including)
Modicon_momentum_171cbu98091 Schneider-electric - (including) - (including)
Modicon_premium_tsxp57_1634m Schneider-electric - (including) - (including)
Modicon_premium_tsxp57_2634m Schneider-electric - (including) - (including)
Modicon_premium_tsxp57_2834m Schneider-electric - (including) - (including)
Modicon_premium_tsxp57_454m Schneider-electric - (including) - (including)
Modicon_premium_tsxp57_4634m Schneider-electric - (including) - (including)
Modicon_premium_tsxp57_554m Schneider-electric - (including) - (including)
Modicon_premium_tsxp57_5634m Schneider-electric - (including) - (including)
Modicon_premium_tsxp57_6634m Schneider-electric - (including) - (including)
Modicon_quantum_140cpu65150 Schneider-electric - (including) - (including)
Modicon_quantum_140cpu65150c Schneider-electric - (including) - (including)
Modicon_quantum_140cpu65160 Schneider-electric - (including) - (including)
Modicon_quantum_140cpu65160c Schneider-electric - (including) - (including)
Plc_simulator_for_ecostruxure_control_expert Schneider-electric - (including) - (including)
Plc_simulator_for_ecostruxure_process_expert Schneider-electric - (including) - (including)

Potential Mitigations

  • Assume all input is malicious. Use an “accept known good” input validation strategy, i.e., use a list of acceptable inputs that strictly conform to specifications. Reject any input that does not strictly conform to specifications, or transform it into something that does.
  • When performing input validation, consider all potentially relevant properties, including length, type of input, the full range of acceptable values, missing or extra inputs, syntax, consistency across related fields, and conformance to business rules. As an example of business rule logic, “boat” may be syntactically valid because it only contains alphanumeric characters, but it is not valid if the input is only expected to contain colors such as “red” or “blue.”
  • Do not rely exclusively on looking for malicious or malformed inputs. This is likely to miss at least one undesirable input, especially if the code’s environment changes. This can give attackers enough room to bypass the intended validation. However, denylists can be useful for detecting potential attacks or determining which inputs are so malformed that they should be rejected outright.
  • To reduce the likelihood of introducing an out-of-bounds read, ensure that you validate and ensure correct calculations for any length argument, buffer size calculation, or offset. Be especially careful of relying on a sentinel (i.e. special character such as NUL) in untrusted inputs.

References