Is Skoop - Instant Video, Content Creation, CRM for LinkedIn & More safe?
We analyzed Skoop - Instant Video, Content Creation, CRM for LinkedIn & More version 2.1.2's actual code and gave it a 38/100 trust score. Skoop provides…
Bottom line
Skoop provides powerful AI, recording and CRM features, but its all-sites reach, sensitive data handling and unsafe webpage bridges create substantial risk.
What it can access
It can read and alter pages everywhere, handle private messages and LinkedIn session cookies, and capture screen, camera or microphone content for its AI and CRM features.[Q1][Q3][Q4][Q5]
Security weaknesses
Any webpage can use weak message checks to affect login state, expose stored access details to local pages, and alter displayed Stripe checkout wording.[Q17][Q19][Q21]
Signs of misuse
The package sends private messages, profiles, prompts, recordings and raw LinkedIn session cookies to Skoop services for advertised features, but misuse beyond that purpose is not established.[Q6][Q14][Q15]
Code findings
What access does this extension ask for, and does that access make sense for what it claims to do?
It requests tabs, scripting, cookies, identity, clipboard writing, web navigation, screen/audio/video capture and access to every website. Much of this supports the advertised recorder, AI assistant and multi-site CRM, but the all-sites scope is substantially broader than a narrowly scoped LinkedIn tool.
Declares the privileged APIs, <all_urls> host access and an all-sites content-script suite, plus specialized scripts for LinkedIn, email, CRM and social sites. — manifest.json:17-27, 44-106
Which websites can it run on, and can it read or change what appears on those pages?
It injects a persistent button and hidden extension iframe into every website. On supported sites it reads posts, profiles, message/email editors and page structure, inserts generated content and can trigger sending in specific workflows.
Creates the Skoop iframe and visible recording/assistant button automatically on every matched page. — gmailContentScript.js:24, 59-300, 407-430
Locates and edits contenteditable, textarea and platform-specific post/message fields for user-selected AI features. — helperfunctions.js:980-1224
Can it see sensitive information you type, such as passwords, payment details, messages, or form entries?
AI features read the user's draft instructions and relevant post, comment, message or email context, then send the constructed prompt to Skoop. This can include private communications, names and email addresses.
Builds an AI prompt from the compose/reply context, user identity and typed instructions, then invokes the Skoop AI request path. — aiInteractionsGmail.js:300-351
Sends the assembled query, platform and message/post mode through the extension to the authenticated AI service. — helperfunctions.js:337-373
Can it access private browser data such as cookies, signed-in sessions, browsing history, bookmarks, or downloads?
It reads LinkedIn's li_at, JSESSIONID and optional li_a cookies and returns their raw values plus the browser user agent to an approved Skoop CRM page. That is intentional LinkedIn-CRM integration, not demonstrated theft, but these cookies can represent the user's LinkedIn session.
Checks for an internal/Skoop CRM sender, reads LinkedIn cookies and returns raw session values. — background.js:818-874
The CRM page bridge restricts page messages to the same window/origin and allows only ping, GET_LINKEDIN_SESSION and startRecordingFromCRM. — contentScriptCrm.js:35-64
Can it access anything else on your device, such as files, location, camera, microphone, clipboard, or installed applications?
It can capture the screen, camera and microphone, write to the clipboard and request Google Calendar access. Recording paths check authentication and media permission and are launched from visible Skoop controls; Chrome's capture/media permission flow remains in place.
Requests audioCapture, desktopCapture, videoCapture, clipboardWrite and a Google Calendar OAuth scope. — manifest.json:17-27, 102-105
Combines selected screen and microphone streams, shows recording state and returns the recorded Blob when stopped. — recorder.js:130-219
Does it send information outside your browser? If so, what information is sent, where does it go, and why?
It sends AI prompts and relevant social/email context to services.skoopapp.com, uploads recorded video or audio to Skoop services, may send video for conversion to rsize-dev.skoopapp.com and stores CRM/profile data with Skoop. These destinations match the advertised product, but the content can be highly sensitive.
Defines the Skoop API, CRM, watch, AI-generation, media-upload and conversion endpoints and posts authenticated prompts/media to them. — next/static/chunks/pages/_app-623e6bad040f81f0.js:2
Uploads a recorded WebM with the Skoop bearer token to the configured video-conversion service. — gmailContentScript.js:3191-3215
Does it download or run code, settings, or instructions supplied by a remote server?
Skoop supplies account data, AI responses, prompts, themes, feature settings and page selector configuration from its server. Those values guide what content is generated and where packaged code inserts it.
Fetches /app-config and parses ext_classNames along with prompt, theme and account data. — next/static/chunks/pages/_app-623e6bad040f81f0.js:2
Packaged insertion logic consumes configured selectors and AI response text as content rather than executing it as JavaScript. — helperfunctions.js:980-1224
Can it take actions without a clear user request, such as opening pages, redirecting searches, downloading files, or sending requests?
Most recording, scraping, generation and sending paths require a Skoop control or browser permission. However, any ordinary webpage can post a forged FROM_CRM_PAGE login/logout event.
Accepts FROM_CRM_PAGE messages from the current page without checking event.origin and forwards supplied requiredData as crmUserLoggedIn or crmSubscriptionCompleted. — helperfunctions.js:4540-4576
handleCrmUserLoggedIn validates the supplied token, stores it as accessToken, marks the extension authenticated and broadcasts storeToken. — next/static/chunks/pages/_app-623e6bad040f81f0.js:2
Persists the accepted token under the Skoop access-token keys. — background.js:434-446
Can it change important browser settings, including your proxy, search engine, homepage, privacy settings, or other extensions?
No evidence of this behavior was found in the reviewed package.
Declared permissions omit proxy, search, management and settings-related APIs. — manifest.json:17-28
Is any important behavior difficult to inspect because the code is hidden, heavily obfuscated, dynamically generated, or supplied by third parties?
The extension contains a very large minified Next.js application, PDF.js/TensorFlow dependencies and many overlapping page access, which materially increases review and attack surface. Most integration scripts remain readable and the important bridges were traceable.
Records an unpacked package of roughly 10.9 MB with large bundled application and library files. — inventory.json:1-20
Loads overlapping integration suites across every page and many social, email and CRM products. — manifest.json:44-100
Does it use eval(), new Function(), or string-based timers to turn text into executable code?
No evidence of this behavior was found in the reviewed package.
Contains PDF.js dynamic-function feature detection and glyph command compilation. — lib/pdf.js:728, 9939
Extension pages use script-src 'self' without unsafe-eval, restricting these dynamic-function optimizations. — manifest.json:110-115
Does it track the websites, pages, searches, or links you visit?
No evidence of this behavior was found in the reviewed package.
Forwards history-state and fragment changes to content scripts for UI refresh. — background.js:1335-1355
Detects LinkedIn profile route changes and sends the current profile URL to extension listeners. — watchLinkedinProfile.js:45-78, 136-152
The profileLoaded runtime handlers store the URL in local React state and acknowledge it; no immediate network request occurs in that handler. — next/static/chunks/pages/index-9e305206650b0090.js:1
Does it create a persistent ID or browser fingerprint to recognize you?
It stores normal account/device information and returns the browser user agent with the LinkedIn session, but no separate generated cross-site tracking ID or broad device-fingerprint collection path was confirmed. A bundled device-registration feature exists; its exact server-side use and disclosures were not observable from the package alone.
Returns navigator.userAgent together with requested LinkedIn session cookies to the approved CRM page. — background.js:851-869
Contains authenticated user-device registration and fingerprint state in the account application bundle. — next/static/chunks/pages/_app-623e6bad040f81f0.js:2
Does it send cookies, session details, authentication data, or page contents elsewhere?
The most sensitive confirmed transfer is raw LinkedIn session cookies from Chrome's cookie store to the Skoop CRM webpage. It also sends user-selected recordings, AI prompts, profile/persona data and relevant post/message/email content to Skoop services.
Returns li_at, JSESSIONID, li_a and userAgent to an allowed internal/Skoop CRM caller. — background.js:818-874
Posts authenticated prompt, account and media data to api.skoopapp.com and its related media service. — next/static/chunks/pages/_app-623e6bad040f81f0.js:2
Does it record typing, form entries, clipboard contents, or screenshots?
It records screen, camera, microphone and voice input and reads editor content used in AI workflows. The reviewed capture paths require user action, authentication and browser permission, show recording state and stop streams.
Requests camera/microphone streams only after the startRecording message, displays the recorder and stops tracks after recording. — gmailContentScript.js:664-755
Handles browser-selected desktop/microphone streams and forwards the completed recording Blob. — recorder.js:130-219
Can a website or remote server send commands that make the extension take actions?
Skoop's server controls prompts, selector configuration, account state and generated AI text; packaged code can insert that text into supported editors and, in an attachment workflow, click LinkedIn's send button after upload. These operations follow user-started Skoop workflows.
Retrieves app configuration and AI output from Skoop's authenticated API. — next/static/chunks/pages/_app-623e6bad040f81f0.js:2
Inserts generated responses into page editors using packaged logic. — helperfunctions.js:980-1224
A user-initiated recorded-media attachment flow uploads the file into matching LinkedIn conversations and clicks send after attachment completes. — gmailContentScript.js:3042-3169
Does it alter links, referral codes, advertisements, shopping carts, or search results?
A confirmed cross-site integrity flaw lets any webpage store an arbitrary discountedMonthlyPrice or paidTrial flag. When the user later opens Stripe Checkout, Skoop rewrites the product-summary description with that value.
Accepts FROM_PAGE from any site without an origin check and writes attacker-supplied discountedMonthlyPrice or paidTrial into extension sync storage. — helperfunctions.js:4540-4549
On checkout.stripe.com, reads those keys and replaces the displayed product-summary description with the stored price/trial wording. — changeStripeAmount.js:2-29
Loads the vulnerable receiving helper on all sites and the display-rewriting script on Stripe Checkout. — manifest.json:44-48, 81-84
Does it redirect or modify web traffic, request headers, downloads, or proxy settings?
It injects a packaged interceptor into LinkedIn's main page context and wraps fetch/XMLHttpRequest to observe selected LinkedIn post and document responses. It forwards those responses to its page access to track post creation/upload results.
Injects the packaged interceptor into LinkedIn's page context. — contentStudio.js:49-64
Wraps LinkedIn fetch/XHR, clones selected responses and posts parsed post/document events to the page without modifying the network request. — interceptor.js:1-117
Can it communicate with software on the computer or services running on localhost?
The production package trusts localhost:3000 and localhost:4001 as CRM/Watch application origins. Merely visiting either matched local origin while logged in causes the page access to copy Skoop access tokens into that page's localStorage.
Runs token-sync scripts on http://localhost:3000 and http://localhost:4001 in addition to the real Skoop sites. — manifest.json:50-61
Copies accessToken, skoopCrmAccessToken and skoopWatchAccessToken from protected extension storage into the matched page's localStorage and keeps them synchronized. — syncLoginOrLogout.js:1-39, 42-73
Does it decode, decrypt, or unpack hidden data and then execute or inject it?
No evidence of this behavior was found in the reviewed package.
The extension-page CSP permits packaged self scripts only and omits remote script sources and unsafe-eval. — manifest.json:110-115
Fetches a user-relevant PDF as a Blob and passes its object URL to the packaged PDF viewer rather than injecting it as script. — pdfViewer.js:1-38
Can ordinary websites access privileged extension features through messaging or exposed files?
The all-sites helper creates an unrestricted ordinary-page-to-extension bridge for FROM_PAGE and FROM_CRM_PAGE messages: it checks only event.source, not origin, domain, nonce or user gesture. This directly enables the account-switch and Stripe-text vulnerabilities.
Accepts pricing and CRM authentication events from every matched webpage without checking event.origin or restricting the page to a Skoop domain. — helperfunctions.js:4540-4576
Loads helperfunctions.js on every HTTP(S) page. — manifest.json:44-48
The separate cookie/session bridge demonstrates the stronger safeguard that is missing from the all-sites helper: exact current-origin/source validation plus an action allowlist. — contentScriptCrm.js:35-64
Does suspicious behavior activate only for certain users, websites, dates, or remote settings?
No evidence of this behavior was found in the reviewed package.
Declares fixed match patterns for each supported integration and a uniform all-sites recording interface. — manifest.json:44-100
Does it perform hidden resource-intensive work, such as cryptocurrency mining?
No evidence of this behavior was found in the reviewed package.
Loads the base ten-script suite on all sites and additional large integration suites on supported services. — manifest.json:44-100
Creates the hidden app iframe and persistent button and rechecks it on navigation events. — gmailContentScript.js:24, 407-438
Does it change form fields or where a form sends its information?
It deliberately edits post, comment, message, email, CRM and campaign fields and dispatches input/change events; some user-started workflows submit or click send after inserting content/media. This matches its AI/CRM purpose.
Writes generated text into supported textareas/contenteditable fields and emits the events needed for the host application to accept it. — helperfunctions.js:212-276, 980-1224
Transfers user-selected recorded media into matched LinkedIn message inputs and clicks send after attachment completes. — gmailContentScript.js:3042-3169
On the supported CRM domains, replaces placeholder subject text in Monaco, CodeMirror, Ace and textarea editors; it does not modify form destinations. — injectSkoopCodeReplace.js:1-79