LeakInspector: an add-on that warns and protects against personal data exfiltration

Overview

LeakInspector 🎇

LeakInspector is an add-on that warns and protects against personal data exfiltration. We developed LeakInspector to help publishers and end-users to audit third parties that harvest personal information from online forms without their knowledge or consent.

It has the following features:

  1. Blocks requests containing personal data extracted from the web forms and highlights related form fields by showing add-on's icon.
  2. Logs technical details of the detected sniff and leak attempts to console to enable technical audits. The logged information includes the value and XPath of the sniffed input element, the origin of the sniffer script, and details of the leaky request such as the URL and the POST data.
  3. A user interface where recent sniff and leak attempts are listed, along with the tracker domain, company and tracker category. The user interface module is based on code taken from DuckDuckGo’s Privacy Essentials add-on.

Our attempts to publish the add-on on the Chrome Web Store failed, because new uploads of Manifest v2 add-ons are not accepted. For leak detection, our add-on requires access to network request details, which will be disallowed in Manifest v3. We are working on publishing the add-on for Firefox.

⚠️ The add-on is a proof-of-concept. It has not been extensively tested. Please use at your own discretion.

ext_mozilla.mp4
Comments
  • Login on Websites

    Login on Websites

    Hi i have installed and tested the extension and i have realized that in some websites where i have account with this extension enabled i cant make login always return username or password wrong when i disable the extension i can make login again with the same credentials.

    opened by carlostkd 7
  • Warnings

    Warnings

    Hi. Thanks for the revelations. 👍️

    Is there any chance this add-on will get approved soon?

    I uploaded the zip to Mozilla for private use approval and got warnings:

    screenshot1

    I tried it as a temporary extension, but I didn't see any blocking. But that could be due to uBlock Origin and my hosts file?

    opened by nicolaasjan 6
  • Publish the add-on at addons.mozilla.org

    Publish the add-on at addons.mozilla.org

    Creating this issue to track the progress of publishing the add-on to AMO. The code for that effort lives here: https://github.com/leaky-forms/leak-inspector/tree/development

    opened by gunesacar 3
  • Warnings issue #9

    Warnings issue #9

    Gets rid of all CSP warnings from issue #9 by inlining all .html fragments into popup.html, eliminating the dependency on jquery.load() from popup.js, and thus any need for base.js.

    opened by grundt 3
  • missing setter for input element value

    missing setter for input element value

    Any idea why the setter in the overridden input element value property is commented out here (line 18)?

    The result is that if any script tries to set the value of an input field, it'll throw an error: Uncaught TypeError: setting getter-only property "value" (i.e. by not providing a setter, it breaks existing functionality)

    I tried simply removing the comment, and it resolved the error and didn't seem to have any ill effect on Leak Inspector. So, curious if there's a reason why it's been commented out.

    https://github.com/leaky-forms/leak-inspector/blob/0842396106b692ae48b4997514f32b70ea1aeadd/page_scripts/page_script.js#L9-L20

    opened by grundt 2
  • TypeError: currentTab is undefined

    TypeError: currentTab is undefined

    Seeing an intermittent error:

    TypeError: currentTab is undefined

    pointing to line 245 in popup.js: https://github.com/leaky-forms/leak-inspector/blob/b0633c03082b90df3deb2326ba8412d32d4f82cb/extension_ui/js/popup.js#L244-L245

    Quite sure it was introduced by pull request #12

    I suspect it's caused by the fact that this code is now executing sooner because it no longer needs to wait on the two (removed) jquery.load() calls that were dynamically loading html fragments. Therefore sometimes beating the async method that populates currentTab:

    https://github.com/leaky-forms/leak-inspector/blob/b0633c03082b90df3deb2326ba8412d32d4f82cb/extension_ui/js/popup.js#L1-L3

    opened by grundt 2
  • Enable for Chromium

    Enable for Chromium

    I know that uploading the extension to the Chrome Store doesn’t allow that, but publishing an extension to upload yourself will be accepted. I use developer mode all the time and install lots of extensions that are currently not on the Chrome Store.

    opened by anon238 2
  • fix: currentTab is undefined

    fix: currentTab is undefined

    Fixes issue #15, an intermittent error that occurs when the DOMContentLoaded event handler executes before the currentTab variable is initialized (within an async function).

    Does this by attaching or directly calling the event handler (depending on document.readyState) from within the async function, after the variable has been initialized.

    opened by grundt 1
  • Feature request: Side-loading for Chrome

    Feature request: Side-loading for Chrome

    The description in the README says attempts to publish to the Chrome Web Store failed suggests that you have a Chrome extension already. It would be great to make that available for manual loading for those of us willing to do so.

    Instructions are here https://www.cnet.com/tech/services-and-software/how-to-install-chrome-extensions-manually/

    opened by oobleck 1
  • Only count distinct (domain+field) sniffs once

    Only count distinct (domain+field) sniffs once

    This is a proposed behavior change to only increment the sniff count once, per distinct "sniff-domain/sniffed-field".

    The change alters the "inputSniffed" message handler to -update- (rather than -insert-) sniff details, if the domain+fieldName+xpath already exists. Included is a modification to setBadge() to display the sniff count when the badge is yellow (i.e. when there are sniffs, but no leaky requests).

    opened by grundt 1
  • Enhancements to setBadge (red,yellow,green)

    Enhancements to setBadge (red,yellow,green)

    Enhancements to setBadge behavior:

    • do not display a count if (at the time the page is loaded) the extension is toggled off
    • set the background color: green (no sniffs or leaky requests detected) yellow (sniffs detected, but no leaky requests) red (leaky requests detected)

    NOTE: this did require adding a new call to the setBadge() method for "inputSniffed" messages

    opened by grundt 1
  • What is the best way to report findings?

    What is the best way to report findings?

    Hi Team,

    I've found that one particular site (for paying medical bills in US) that I use showed leaking plain-text passwords, although the connection of this site to another site (for login purposes) is through https. Also excuse my naivitete, I do not claim to know anything about security, privacy, so might be just fine..

    In any case it dispalayed to me Requests exfiltrating personal data extracted from web forms for both email/password, and in Chrome Developer ToolBox - I could see in plaintext my user/password.

    My question really is - is there an appropriate way to report these without affecting other users? After all I have to use this service, and not sure how they can be reached to fix it.

    (Since I can't use the chrome web store to install the plugin, I've installed it directly from a folder I've "git cloned")

    Thank you!

    opened by malkia 1
  • Write tests for critical functionality

    Write tests for critical functionality

    We should have tests covering (at least) the basic functionality such as sniff detection and leaky request blocking. The simplest way could be to use Selenium, similar to Privacy Badger: https://github.com/EFForg/privacybadger/tree/master/tests

    Unfortunately Playwright doesn't (yet) support Firefox add-ons: https://github.com/microsoft/playwright/issues/7297

    help wanted 
    opened by gunesacar 4
Owner
LeakyForms
Leaky Forms: A Study of Email and Password Exfiltration Before Form Submission
LeakyForms
A personal semantic search engine capable of surfacing relevant bookmarks, journal entries, notes, blogs, contacts, and more, built on an efficient document embedding algorithm and Monocle's personal search index.

Revery ?? Revery is a semantic search engine that operates on my Monocle search index. While Revery lets me search through the same database of tens o

Linus Lee 215 Dec 30, 2022
A javascript standard data structure library which benchmark against C++ STL.

js-sdsl A javascript standard data structure library which benchmark against C++ STL. Note Note that our official version starts from 2.0.0. In order

Zilong Yao 5 Dec 10, 2022
Validate your Markdown frontmatter data against a JSON schema — remark-lint rule plugin

remark-lint-frontmatter-schema Validate Markdown frontmatter YAML against an associated JSON schema with this remark-lint rule plugin. Supports: Types

Julian Cataldo 20 Dec 10, 2022
The frontend of a full stack application of a personal wallet made with React, Node and MongoDB that allows you to add inputs, outputs and see all your extract.

The frontend of a full stack application of a personal wallet made with React, Node and MongoDB that allows you to add inputs, outputs and see all your extract.

Bernardo Rodrigues 5 Jun 2, 2022
The backend of a full stack application of a personal wallet made with React, Node and MongoDB that allows you to add inputs, outputs and see all your extract.

My first full stack application with the concept of a personal wallet that allows you to create a personal account to keep track of your entire statement by adding incoming and outgoing transactions, as well as calculating the total balance and being able to edit and delete old transactions.

Bernardo Rodrigues 6 Jun 23, 2022
A lightweight extension to automatically detect and provide verbose warnings for embedded iframe elements in order to protect against Browser-In-The-Browser (BITB) attacks.

Enhanced iFrame Protection - Browser Extension Enhanced iFrame Protection (EIP) is a lightweight extension to automatically detect and provide verbose

odacavo 16 Dec 24, 2022
Utility for authorizing user in a connected app, creating JWT to authenticate against it, and perform a sample callout.

Question: What is this for? Answer: When configuring a Salesforce Connected app to use certificates to authenticate you will use JSON Web Tokens to a

null 4 Jun 15, 2022
This project will be using various AI and Rule Engine algorithm to detect various attack against a company!

?? Introduction This project will be using various AI and Rule Engine algorithm to detect various attack against a website! ?? Mission After starting

Harish S.G 4 Apr 29, 2022
Cards Against Humanity Game Client made with ⚡Nextron (Next.js + Electron) and Typescript

CAH Client Introduction This project is one of the other projects related to the Cards Against Humanity (CAH) game. This client is made in Electron, u

null 3 Jun 17, 2022
Invadium runs exploit playbooks against vulnerable target applications in an intuitive, reproducible, and well-defined manner.

Invadium Invadium runs exploits against one or more target applications in an intuitive, reproducable, and well-defined manner. It focuses on bridging

Dynatrace Open Source 10 Nov 6, 2022
An app to test out your typing speed, save your progress and view statistics against them.

Introduction An app to test out your typing speed, save your progress and view statistics against them. Demo Check out the quick demo here. Getting St

Nithin Kumar B 2 Sep 7, 2022
Chrome extension to simulate cryptoblades fights, giving you the win rate % against all enemies with just one click

CryptoBlades fight simulator This is a Chrome extension that will help you to know the exact win rate percentage you have on each cryptoblades fight.

Jose Leonardo Dos Ramos Rivas 12 Aug 7, 2022
On-chain defense against hostile takeovers

Poison pill On-chain defense against hostile takeovers. In layman's terms, this smart contract only facilitates a discounted sale of shares to a white

Michalis Kargakis 6 Jul 19, 2022
🦔 Cyber-weapon against Putin.

This is a Next.js project bootstrapped with create-next-app. Getting Started First, run the development server: npm run dev # or yarn dev Open http://

Artem Tamoian 7 Sep 14, 2022
Fullstack Dynamic NFT Mini Game built using 💎 Diamond Standard [EIP 2535] 🏃‍♀️Players can use Hero NFT to battle against Thanos ⚔ Heroes can be Healed by staking their NFT 🛡

?? Fullstack Dynamic NFT Mini Game ?? ?? Using Diamond Standard Play On ?? ?? ⏩ http://diamond-dapp.vercel.app/ Project Description ?? Fullstack Dynam

Shiva Shanmuganathan 21 Dec 23, 2022
Security tool + attack database used to take quick action against newly-discovered vulnerabilities in the blockchain.

SolidGuard Version: v1.0.1 SolidGuard is a Blockchain Security tool catered towards organizations who manages decentralized applications on the Ethere

Team SolidGuard 4 Jan 3, 2023
A server setup to take screenshots against the green screen in-game.

alt:V Clothing Green Screener Support on Patreon. Seriously. Ever want screenshots of every single clothing item in GTA:V? Well this is your repositor

null 13 Dec 26, 2022
A large scale simulation which pits millions of space ships against each other in a virtual universe all running directly in SingleStore.

Wasm Space Program In this demo we simulate a fake universe full of thousands of solar systems. In each solar system there are many space ships and en

SingleStore Labs 11 Nov 2, 2022
Patronum: Ethereum RPC proxy that verifies RPC responses against given trusted block hashes

Patronum Ethereum RPC proxy that verifies RPC responses against given trusted block hashes. Currently, most of the DAPPs and Wallets interact with Eth

null 14 Dec 7, 2022