Giter VIP home page Giter VIP logo

leak-inspector's Introduction

Leaky Forms: A Study of Email and Password Exfiltration Before Form Submission (USENIX Security'22)

This repository contains the code for our paper titled Leaky Forms: A Study of Email and Password Exfiltration Before Form Submission.

The paper is based on a measurement of email and password collection that occurs before the form submission on the top 100,000 websites. We evaluate the effect of user location (EU vs. US), browser configuration (desktop vs. mobile), and interaction with consent dialogs (accept all/reject all/no interaction).

For a more detailed overview please visit the project's homepage.

Crawler

Code: https://github.com/asumansenol/leaky-forms-crawler

A high-level overview of our crawler is given below: Crawler Arch

We extended DuckDuckGo’s Tracker Radar Collector to measure email and password exfiltration. Our crawler was capable of detecting and filling email and password fields, and intercepting script access to filled input fields.

Email field detection: In order to identify email fields, we integrated into our crawler Firefox Relay’s Fathom-based email field classifier. Using this model allowed us to identify 76% more email fields than we would detect by simply searching for input fields with type email.

Consent automation: We integrated Consent-O-Matic into our crawler to investigate the effect of users’ consent preferences. Consent-O-Matic (Nouwens et al.) is a browser extension that can recognize and interact (e.g., accept or reject cookies) with various Consent Management Provider (CMP) pop-ups. We configured Consent-O-Matic to log detected CMPs, and interact with the CMP.

Data

The data from ten crawls performed between May 2021 and June 2021 is available for download from this link.

Leak Detector

Code: https://github.com/asumansenol/leaky-forms/tree/main/leak-detector

Leak detector module searches for the filled email address and the password, and their various encodings and hashes in the HTTP traffic. The module is based on Englehardt et al.’s method, but it was improved to detect novel ways to exfiltrate the personal data.

Analysis

Code: https://github.com/asumansenol/leaky-forms/tree/main/analysis

You can find the Jupyter notebooks, pickles and CSVs that are used in the analysis folder.

LeakInspector

Code: https://github.com/leaky-forms/leak-inspector

It is a proof-of-concept browser add-on that warns users against sniff attempts and blocks requests containing personal information. You can find the source code of this add-on in this repo.

Reference

@inproceedings{senol2022leaky,
  title={Leaky Forms: a study of email and password exfiltration before form submission},
  author={Senol, Asuman and Acar, Gunes and Humbert, Mathias and Borgesius, Frederik Zuiderveen},
  booktitle={31st USENIX Security Symposium (USENIX Security 22)},
  pages={1813--1830},
  year={2022}
}

leak-inspector's People

Contributors

asumansenol avatar grundt avatar gunesacar avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

leak-inspector's Issues

TypeError: currentTab is undefined

Seeing an intermittent error:

TypeError: currentTab is undefined

pointing to line 245 in popup.js:

document.addEventListener("DOMContentLoaded", function () {
renderURL(extractHostFromURL(currentTab.url));

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:

let currentTab;
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
currentTab = tabs[0];

How to use?

Hi,

Read about this in a news article. Very interesting and I'd like to try it for myself. Can you tell how to install this as an add-on in Firefox?

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.

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.

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.

document.addEventListener("modifyInputElementSetterGetter", function (e) {
let inputElement = getElementByXpath(e.detail);
let realHTMLInputElement = Object.getOwnPropertyDescriptor(
HTMLInputElement.prototype,
"value"
);
Object.defineProperty(inputElement, "value", {
enumerable: true,
configurable: true,
// set: realHTMLInputElement.set,
get: function () {
const elValue = realHTMLInputElement.get.call(this);

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!

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?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.