Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply chat export for merge
-
ExploitUnique messages fall inside other chat's date range
-
Executionmerge_chats() keeps only strictly-newer messages
-
ImpactMessages silently dropped from merged output
Vulnerability Assessment
| Weakness |
CWE
|
| Exploitation Conditions | Requires a victim to call merge_chats()/BaseChat.merge() on two or more chat exports where at least one is supplied or influenced by the attacker, in whatstk 0.3.0 before 0.9.0. The silent drop occurs only for messages that exist in one export but whose timestamps fall inside the date range already covered by the other export, because the merge keeps the chat with the oldest first message whole and appends from the other only messages strictly newer than the first chat's last message. Limiting factors: exploitation is local and depends entirely on the victim actively performing a merge on attacker-influenced input (AV:L, UI:A); there is no network vector, no code execution, and no confidentiality impact - the sole effect is undetected omission of messages from the merged output. |
| Impact | All supplied decision signals point to low real-world urgency. The input CVSS 4.0 base score is 1.8 (low) with AV:L (local - the attacker's influence is limited to the chat-export files fed to the library), AT:P (a specific condition must hold), UI:A (the victim must actively run the merge), and an impact confined to VI:L (integrity of the merged dataset); VC, VA and all subsequent-system metrics are N. vuln.today assigns the decision label 'monitor', not act_now or emergency. No EPSS score and no KEV entry were provided in the input, and no exploit code is referenced, so there is no public exploit identified at time of analysis - this is a silent-correctness defect, not a remotely weaponizable flaw. The key nuance a raw score hides: although severity is low, the consequence is undetectable data omission in a library whose documented uses include forensic review and training-data generation, so for those specific workflows the integrity impact is more consequential than 1.8 suggests. The 'Information Disclosure' tag conflicts with the evidence - the flaw drops messages (an integrity/data-loss problem) and the CVSS vector records VC:N, so there is no confidentiality impact; treat that tag as suspect. |
| Exploit ScenarioDerived | An analyst building a merged record or training corpus runs whatstk.merge_chats() (via BaseChat.merge()) over two WhatsApp exports, at least one supplied by an adversarial party. Any message unique to that party's export whose timestamp falls inside the date range already covered by the other export is silently discarded, so the merged output omits real messages with no warning and no removed-count. No public exploit code is referenced; a vendor fix exists in v0.9.0. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 03, 2026
Silent message loss in whatstk 0.3.0 through 0.8.x lets a party who supplies one of the chat exports cause messages to vanish from the output of merge_chats() (reached through BaseChat.merge()) without any warning or count of what was removed. The merge keeps whole the chat whose first message is oldest and appends from the other export only messages strictly newer than that chat's last message, so every message of the second export that falls inside the already-covered date range is discarded; a message held by only one export is dropped whenever its date sits inside the range of the other. Exploitation requires the victim to run a merge over attacker-influenced input (local, active user interaction, no privileges needed), there is no code execution or confidentiality impact, the assessed severity is low (CVSS 1.8), no public exploit has been identified at time of analysis, and the vendor has released a fix in 0.9.0.
RemediationAI
Upgrade to whatstk 0.9.0 or later, the first release containing the corrected merge; the fix is delivered by pull request https://github.com/lucasrodes/whatstk/pull/185 and commit https://github.com/lucasrodes/whatstk/commit/01d66d8, with release notes at https://github.com/lucasrodes/whatstk/releases/tag/v0.9.0. After upgrading, the merge returns the date-ordered union of all messages and deduplicates only where date, username and text all match, so no message inside an overlapping range is silently discarded and a genuinely repeated message is still kept twice. No standalone workaround for pre-0.9.0 releases is documented in the available sources; the vendor's fix is the complete remedy. Until the upgrade can be applied, consumers who depend on completeness, such as forensic reviewers or dataset builders, should avoid merging attacker-supplied exports with trusted ones and should compare the returned row count against the inputs before relying on the result, since the pre-fix code neither warns nor reports how many messages it removed.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
whatstk parses plain-text WhatsApp exports into pandas DataFrames and offers chat merging as a utility in whatstk/utils/chat_merge.py. The flaw is CWE-1023, an incomplete comparison with missing factors: the merge logic compares the two conversations on their date ranges rather than on the identity of individual messages. Concretely, the implementation keeps the chat with the oldest first message intact and appends from the second only those messages that are strictly newer than the last message of the first chat, and both branches of the internal _merge_two_chats() helper behave this way, so input order does not rescue the dropped messages. Because nothing flags the omission, the returned DataFrame is indistinguishable from a complete merge to a downstream consumer. That matters because the library's documented uses include forensic review and the generation of training data, where an undetected gap is more damaging than an error. The upstream fix in PR #185 replaces this pairwise range logic with a union that orders all messages by date and keeps one copy of a message only when date, username and text all match, so genuinely repeated messages still survive; the same PR adds a documentation page stating explicitly that merging combines exports rather than reconciling them. The affected package is identified by CPE cpe:2.3:a:lucasrodes:whatstk.
Know when Whatstk gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:A/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
The attacker only supplies export files (no auth, PR:N) but the victim must run the merge locally (AV:L, UI:R); the sole effect is omitted messages, so I:L and C/A:N.
Primary rating from Vendor (Secur0).
CVSS VectorVendor: Secur0
DescriptionCVE.org
Incomplete Comparison with Missing Factors (CWE-1023) in merge_chats() (whatstk/utils/chat_merge.py), reached from BaseChat.merge(), in whatstk from 0.3.0 before 0.9.0 allows a party that supplies the chat exports to cause messages to be absent from the merged output with no indication that anything was removed, because the merge keeps whole the chat whose first message is oldest and appends from the other only the messages that are strictly newer than the last message of the first. Every message of the second chat that falls inside the date range already covered by the first is therefore discarded. The two chats are compared on their date ranges and not on the identity of the individual messages, so a message held by only one of the two exports is dropped whenever its date falls inside the range of the other, and both branches of _merge_two_chats() behave this way. The merged result is returned without a warning and without a count of what was removed. This results in a merged chat that omits messages the inputs contain, in a library whose documented uses include forensic review and the generation of training data.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
EUVD-2026-115913
NVD
CVE.org
Vulnrichment
GitHub
Exploit-DB