davenardella snap7 up to 1.4.3 ReadVar Request src/core/s7_server.cpp PerformFunctionRead out-of-bounds write
| CVSS Meta Temp Score | Current Exploit Price (≈) | CTI Interest Score |
|---|---|---|
| 6.0 | $0-$5k | 0.35 |
Summary
A vulnerability labeled as critical has been found in davenardella snap7 up to 1.4.3. This impacts the function TS7Worker::PerformFunctionRead of the file src/core/s7_server.cpp of the component ReadVar Request Handler. Such manipulation leads to out-of-bounds write.
This vulnerability is documented as CVE-2026-15105. The attack requires being on the local network. Additionally, an exploit exists.
The project was informed of the problem early through an issue report but has not responded yet.
Details
A vulnerability was found in davenardella snap7 up to 1.4.3. It has been rated as critical. Affected by this issue is the function TS7Worker::PerformFunctionRead of the file src/core/s7_server.cpp of the component ReadVar Request Handler. The manipulation with an unknown input leads to a out-of-bounds write vulnerability. Using CWE to declare the problem leads to CWE-787. The product writes data past the end, or before the beginning, of the intended buffer. Impacted is confidentiality, integrity, and availability.
The weakness was released by Chuan Wei (CarnegieMe) as 16 as not defined issue (GitHub). The advisory is available at github.com. The vendor was not involved in the coordination of the public release. This vulnerability is handled as CVE-2026-15105. The exploitation is known to be easy. The attack needs to be done within the local network. No form of authentication is required for exploitation. Technical details as well as a public exploit are known.
A public exploit has been developed by Chuan Wei (CarnegieMe) in Python. The exploit is available at github.com. It is declared as proof-of-concept. The project was informed of the problem early through an issue report but has not responded yet. The vulnerability scanner Nessus provides a plugin with the ID 326078 (Linux Distros Unpatched Vulnerability : CVE-2026-15105), which helps to determine the existence of the flaw in a target environment.
There is no information about possible countermeasures known. It may be suggested to replace the affected object with an alternative product.
The vulnerability is also documented in the databases at Tenable (326078) and EUVD (EUVD-2026-42468). If you want to get best quality of vulnerability data, you may have to visit VulDB.
Product
Vendor
Name
Version
Website
CPE 2.3
CPE 2.2
CVSSv4
VulDB Vector: 🔒VulDB Reliability: 🔍
CNA CVSS-B Score: 🔒
CNA CVSS-BT Score: 🔒
CNA Vector: 🔒
CVSSv3
VulDB Meta Base Score: 6.3VulDB Meta Temp Score: 6.0
VulDB Base Score: 6.3
VulDB Temp Score: 5.7
VulDB Vector: 🔒
VulDB Reliability: 🔍
CNA Base Score: 6.3
CNA Vector: 🔒
CVSSv2
| AV | AC | Au | C | I | A |
|---|---|---|---|---|---|
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| 💳 | 💳 | 💳 | 💳 | 💳 | 💳 |
| Vector | Complexity | Authentication | Confidentiality | Integrity | Availability |
|---|---|---|---|---|---|
| Unlock | Unlock | Unlock | Unlock | Unlock | Unlock |
| Unlock | Unlock | Unlock | Unlock | Unlock | Unlock |
| Unlock | Unlock | Unlock | Unlock | Unlock | Unlock |
VulDB Base Score: 🔒
VulDB Temp Score: 🔒
VulDB Reliability: 🔍
Exploiting
Class: Out-of-bounds writeCWE: CWE-787 / CWE-119
CAPEC: 🔒
ATT&CK: 🔒
Physical: No
Local: No
Remote: Partially
Availability: 🔒
Access: Public
Status: Proof-of-Concept
Author: Chuan Wei (CarnegieMe)
Programming Language: 🔒
Download: 🔒
EPSS Score: 🔒
EPSS Percentile: 🔒
Price Prediction: 🔍
Current Price Estimation: 🔒
| 0-Day | Unlock | Unlock | Unlock | Unlock |
|---|---|---|---|---|
| Today | Unlock | Unlock | Unlock | Unlock |
Nessus ID: 326078
Nessus Name: Linux Distros Unpatched Vulnerability : CVE-2026-15105
Threat Intelligence
Interest: 🔍Active Actors: 🔍
Active APT Groups: 🔍
Countermeasures
Recommended: no mitigation knownStatus: 🔍
0-Day Time: 🔒
Timeline
07/08/2026 Advisory disclosed07/08/2026 VulDB entry created
08/02/2026 VulDB entry last update
Sources
Product: github.comAdvisory: 16
Researcher: Chuan Wei (CarnegieMe)
Status: Not defined
CVE: CVE-2026-15105 (🔒)
GCVE (CVE): GCVE-0-2026-15105
GCVE (VulDB): GCVE-100-376946
EUVD: 🔒
scip Labs: https://www.scip.ch/en/?labs.20161013
Entry
Created: 07/08/2026 19:12Updated: 08/02/2026 00:23
Changes: 07/08/2026 19:12 (58), 07/09/2026 05:30 (11), 07/10/2026 15:12 (2), 08/01/2026 17:00 (2), 08/01/2026 20:16 (1), 08/02/2026 00:23 (31)
Complete: 🔍
Submitter: VULL
Committer: VULL
Cache ID: 216::103
Submit
Accepted
- Submit #851026: Davide Nardella Snap7 master(commit:30f37da3114024a71ba93f7fd855c680b97a406f) Stack-based Buffer Overflow (by VULL)
If you want to get best quality of vulnerability data, you may have to visit VulDB.
The entry classifies this as deserialization (CWE-502), and the summary reads "the manipulation with an unknown input leads to a deserialization vulnerability". Nothing on this path deserializes anything. The defect is a failed bounds check caused by an unsigned comparison.
In TS7Worker::ReadArea (src/core/s7_server.cpp) the guard is:
if (PDURemainder-Size<=0)
return RA_SizeOverPDU(ResItemData, EV);
else
PDURemainder-=Size;
Size is declared longword, which is uint32_t (snap_platform.h:119), while PDURemainder is int. In PDURemainder-Size the usual arithmetic conversions promote PDURemainder to unsigned, so the expression can never be <= 0 except on exact equality, and the per-PDU bound never fires.
Instrumenting PerformFunctionRead at FPDULength 480 with 20 items of 201 bytes shows PDURemainder running 279, 78, -123, -324 and on to -3339 while every item is still accepted, and Offset climbing to 3916. The overflow is the response assembly walking past the end of the stack-allocated TS7Answer23 Answer buffer.
So the accurate classification is an out-of-bounds write arising from an integer conversion defect, CWE-787 with CWE-191 as the root, rather than CWE-502. Worth noting that the accepted submit behind this entry is itself titled "Stack-based Buffer Overflow", so the record is already inconsistent with its own source.
Upstream issue 16 attributes the cause to an accounting mismatch between ReadArea and PerformFunctionRead, where the first charges PDURemainder only the raw data length while the second advances Offset by data plus a 4 byte per-item header plus padding. That mismatch is real but accounts for roughly 100 bytes across 20 items, which is not enough to leave the buffer on its own. The signedness defect is what removes the bound entirely.