CWE-924, Improper Enforcement of Message Integrity During Transmission in a Communication Channel, applies when a product sets up a channel with an endpoint and receives a message from it, but does not make sure the message was not modified on the way.
How it happens
Picture an app that fetches configuration, an update manifest or a command over plain HTTP, or over a connection where certificate checks have been switched off. Nothing proves the bytes that arrived are the bytes that were sent.
MITRE describes the attacker's options: modify the message and spoof the endpoint by interfering with data as it crosses the network, or redirect the connection to a system under their control.
# Weak: certificate checking turned off
requests.get("https://updates.example.com/manifest", verify=False)
# Better: default verification stays on
requests.get("https://updates.example.com/manifest")
What an attacker gains
MITRE lists integrity and confidentiality impact, and the ability to gain privileges or assume identity. If the attacker can spoof the endpoint, they get all the privileges that were intended for the original endpoint.
How to find it
The record lists no detection methods and no observed CVEs. Review every place the product receives data from another system. Look for plain HTTP URLs, disabled certificate validation and protocols that carry no integrity protection. A network capture during testing will show messages that travel unprotected.
How to fix it
No formal mitigations are listed in the record. Practical steps:
- Use an authenticated, integrity protected channel such as TLS with full certificate validation.
- Never ship code that disables validation, even for testing.
- For high value messages, add a signature or message authentication code the receiver checks.
Quick check
Is encryption alone enough for integrity?
Not on its own. The point of this weakness is that the receiver must verify the message was not changed, so use a mechanism that provides integrity and endpoint authentication.