
Security News
Axios Maintainer Confirms Social Engineering Attack Behind npm Compromise
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.
Web Password-Based Keying: Authentication that defends against exposing passwords in use or in transit, similar to how hashing defends against exposing passwords at rest.
Authentication that defends against exposing passwords in use or in transit, similar to how hashing defends against exposing passwords at rest.
Any website that keeps unhashed passwords would be mocked as negligent, since password databases have been exposed hundreds or thousands of times, including for many of the biggest websites in the world.
Unfortunately, sites still receive and hold passwords in memory during authentication, and many breaches have exposed passwords through memory disclosures, like Heartbleed and exposed crash dumps, or passive interception of requests after decryption.
This is a curious vulnerability, as resolving it does not require any user-visible changes, and with all modern browsers, it also no longer requires complex code on either the client or the server.
This project implements such a system, with client implementation in a few lines of JavaScript ( < 1kB minified, < 500 bytes gzipped), and example server implementations in both Rust and Python at https://github.com/scriptjunkie/webpwk.
Without NPM, simply copy the proof function into your code and use as demonstrated in login.html.
Using NPM, add the webpwk package to your project dependencies. Then in your JavaScript code, import the package and upon submitting a login, instead of submitting the password, get a challenge from the server and submit the result of await proof(password, challenge).
import { proof } from 'webpwk';
const challenge = new Uint8Array(await (await fetch('challenge')).arrayBuffer());
let response = await fetch('login', {method: 'POST', body: await proof(password.value, challenge)});
See example code in the server folders, e.g. rust and python.
Instead of sending passwords directly over the network, webpwk uses a challenge-response authentication protocol with Ed25519 asymmetric cryptographic signatures:
/challenge endpointThis ensures passwords never traverse the network or are held in memory on the server, even during authentication, and ensures that any authentication information in memory, such as the signatures, cannot be replayed.
cd rust
cargo run
Then open http://127.0.0.1:2203 in your browser.
cd python
pip install -r requirements.txt
python main.py
Then open http://127.0.0.1:2203 in your browser.
FAQs
Web Password-Based Keying: Authentication that defends against exposing passwords in use or in transit, similar to how hashing defends against exposing passwords at rest.
We found that webpwk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.

Security News
The Axios compromise shows how time-dependent dependency resolution makes exposure harder to detect and contain.