Security Alert: Confirmed Malware
PolyPodder
ID: mbakfjliknbhemfibjfiancgpndfcmgb
Supported Languages
Extension Info & Metadata
Publisher Contextual Analysis
- Author
- PolyPodderView Profile
- Privacy
- Privacy Policy
- Help
- Help Center
- MX records exist
- Yes
- Domain exists
- Yes
- Is disposable
- No
- Is role-based
- No
- Mailbox exists
- Yes
Smart German learning assistant powered by AI: Get instant translations, grammar insights, and cultural context while browsing.
Learn German seamlessly as you browse! Select text for instant translations or open the chat assistant to ask questions, practice phrases, and get detailed explanations. Complete with native pronunciations and grammar insights.
Sensitive Domain Access
This extension has access to the following sensitive domains:
- https://firebasestorage.googleapis.com/*
Content script injects backend-supplied fields (translation, vocabularyAnalysis, grammarExplanation, culturalContext, etc. returned from https://polypodder-backend.vercel.app) into the DOM of arbitrary web pages via innerHTML with no sanitization. A compromised or malicious backend response could deliver HTML/script-like payloads into every page the user visits. Not overtly malicious, but a meaningful XSS sink worth documenting.
function updatePopupWithAnalysis(analysis) { if (!popup) return; // 1. 翻译和发音 popup.querySelector('.translation-text') .innerHTML = `${analysis.translation || 'No translation available'}${analysis.model_used ? `<span style="font-size: 11px; background: ${analysis.model_used.includes('gpt-4') ? '#4ade80' : '#fbbf24'}; color: ${analysis.model_used.includes('gpt-4') ? '#064e3b' : '#92400e'}; padding: 2px 6px; border-radius: 12px; margin-left: 8px;">${analysis.model_used}</span>` : ''}`; // ... const vocabSection = popup.querySelector('.vocabulary-section'); if (vocabSection) { vocabSection.innerHTML = analysis.vocabularyAnalysis ? `<div class="vocab-card vocab-color">${analysis.vocabularyAnalysis.replace(/\n/g, '<br>')}</div>` : ''; } // ... blocks += `<div class="analysis-card grammar-color"><div class="card-title">GRAMMAR</div><div>${analysis.grammarExplanation.replace(/\n/g, '<br>')}</div></div>`;Popup renders Firestore history documents (item.text, item.translation, item.audioUrl) directly into innerHTML without escaping. Since the records originate from arbitrary web pages the user selected text on, any page that plants specially crafted text could land stored HTML in the user's extension popup. Low severity because it affects only the authenticated user's own history, but it is an unsanitized sink.
historyList.innerHTML = items.map((item, index) => { let sourceDisplay = 'Unknown source'; if (item.sourceUrl) { try { const url = new URL(item.sourceUrl); sourceDisplay = url.hostname.replace(/^www\./, ''); } catch (e) { /* ... */ } } return ` <div class="history-item"> <div class="history-item-content"> <div class="text-container"> <div class="selected-text">${item.text}</div> ${item.audioUrl ? ` <button class="audio-btn" data-text="${item.text}" data-audio-url="${item.audioUrl}" title="Listen"> ... </button> ` : ''} </div> <div class="translation">${item.translation}</div> <div class="meta-info"> <span class="source" title="${item.sourceUrl || ''}">${sourceDisplay}</span> <span class="timestamp">${new Date(item.timestamp).toLocaleString()}</span> </div> </div> </div> `;}).join('');By severity
Versions scanned
Showing 1 of 3 scanned versions with more than one unique finding. Counts are unique findings that include each version.
| Extension Version | Code Review Findings |
|---|---|
| 1.1.1 | 2 |
Files with findings
2 distinct paths — top paths by unique finding count:
- content.js1
- popup.js1
URLs
View the external URLs this extension communicates with to understand its network activity and data interactions.
Gain full insight into all external connections.
Upgrade for full visibility.
Gain full insight into all external connections.
Upgrade for full visibility.
Code Diff
Compare extension code between any two versions.
No comparable text files found between these versions.
Browse and explore files within this extension package
Gain full insight into all external connections.
Upgrade for full visibility.