← Back to AI Insights
Gemini Executive Synthesis

Security vulnerabilities in Graphify's `_fetch_tweet` function (SSRF) and Neo4j Cypher export (injection).

Technical Positioning
An AI coding assistant skill that turns code/docs into a queryable knowledge graph.
SaaS Insight & Market Implications
This issue exposes critical security vulnerabilities within Graphify, specifically an SSRF bypass in `_fetch_tweet` and a Cypher injection flaw in the Neo4j export. The SSRF allows unprotected HTTP requests via user-controlled URLs, circumventing existing `safe_fetch()` mechanisms. The Cypher injection vulnerability arises from insufficient escaping of user-derived labels and relation names during statement construction, enabling arbitrary database manipulation. For B2B SaaS, these are severe findings. Security exploits like SSRF and injection can lead to data breaches, system compromise, and significant reputational damage. Addressing these immediately is paramount for Graphify's viability, especially as an AI coding assistant handling sensitive codebases. Failure to prioritize security will severely limit enterprise adoption, as trust and data integrity are non-negotiable requirements for B2B software.
Proprietary Technical Taxonomy
SSRF protections `_fetch_tweet` `safe_fetch()` URL validation redirect re-validation size caps `urllib.request.urlopen()` user input

Raw Developer Origin & Technical Request

Source Icon GitHub Issue Apr 6, 2026
Repo: safishamsi/graphify
(More) serious bugs

Some more stuff claude noted:

**1. `_fetch_tweet` bypasses all SSRF protections**

`ingest.py:70-71` — You built a whole `safe_fetch()` system with URL validation, redirect re-validation, and size caps. Then `_fetch_tweet()` ignores all of it and calls `urllib.request.urlopen()` directly with a URL constructed from user input. The `oembed_api` URL is built by string-formatting `urllib.parse.quote(oembed_url)`, but the original `url` is only validated *after* `_detect_url_type()` already classified it — and the oEmbed call happens before `validate_url()` has a chance to reject anything because the code path enters `_fetch_tweet()` at line 208 before the `try/except` block at line 195 even matters (the tweet fetch is inside the try, but the raw `urlopen` doesn't go through `safe_fetch`). Any tweet-like URL triggers an unprotected HTTP request with no redirect validation, no size cap, and no scheme check on the constructed oEmbed URL.

**2. Neo4j Cypher export is injection-vulnerable**

`export.py:278-293` — `to_cypher()` builds Cypher statements by string-interpolating node IDs, labels, and relation names with only a single-quote escape (`replace("'", "\\'")`). Node IDs come from `_make_id()` (safe), but labels come from source code identifiers that can contain backslashes. A label like `foo\')}; MATCH (n) DETACH DELETE n;//` produces valid injection. The `relation` field is uppercased and has slashes replaced, but that's it. Anyone who exports to Neo4j and runs the generated ...

Developer Debate & Comments

No active discussions extracted for this entry yet.

Adjacent Repository Pain Points

Other highly discussed features and pain points extracted from safishamsi/graphify.

Extracted Positioning
Graphify's query mechanism, evolving from keyword-based BFS to embedding-based semantic search.
An AI coding assistant skill that turns code/docs into a queryable knowledge graph.
Extracted Positioning
Graphify's worked examples and their completeness, specifically the `graph.html` output.
An AI coding assistant skill that turns code/docs into a queryable knowledge graph.
Extracted Positioning
Graphify's semantic similarity feature, specifically adding local embeddings via quantized models (Gemma 4).
An AI coding assistant skill that turns code/docs into a queryable knowledge graph.
Extracted Positioning
Graphify's user onboarding and visualization of its output.
An AI coding assistant skill that turns code/docs into a queryable knowledge graph.
Extracted Positioning
Graphify's language support expansion to include COBOL.
An AI coding assistant that turns code into a queryable knowledge graph.

Engagement Signals

0
Replies
open
Issue Status

Cross-Market Term Frequency

Quantifies the cross-market adoption of foundational terms like labels and HTTP request by tracking occurrence frequency across active SaaS architectures and enterprise developer debates.