Skip to main content

whatstk CVE-2026-121564

| EUVDEUVD-2026-115913 LOW
Incomplete Comparison with Missing Factors (CWE-1023)
2026-11-03 Secur0
1.8
CVSS 4.0 · Vendor: Secur0
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply chat export for merge
  2. Exploit
    Unique messages fall inside other chat's date range
  3. Execution
    merge_chats() keeps only strictly-newer messages
  4. Impact
    Messages 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.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

whatstk 0.3.0 <0.9.0

Affected Packages

euvd whatstk fix: 0.9.0

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

Vendor (Secur0) PRIMARY 1.8 LOW
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
vuln.today AI 3.3 LOW

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.

3.1 AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:N
4.0 AV:L/AC:L/AT:P/PR:N/UI:A/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (Secur0).

CVSS VectorVendor: Secur0

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
Active
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

Prevalence
Low
niche open-source Python library for WhatsApp export analysis
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity LOW
CISA KEV No
Public POC No
EPSS N/A
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact· derived
Low

Priority Score

9
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +9
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy