DEV Community

Mustafa ERBAY
Mustafa ERBAY

Posted on • Originally published at mustafaerbay.com.tr

16 Billion Passwords Leaked News: Are You Really in Danger?

Last month, I came across another news headline: "A staggering 16 billion passwords leaked to the internet!" Such headlines initially panic everyone, creating a feeling that all our accounts will be compromised instantly. However, with 20 years of experience in the field, I can tell you that these large numbers are usually just the tip of the iceberg and don't fully reflect the real danger. Often, these numbers are a compilation of data leaked from various platforms over the years, much of which is old and duplicated. The real issue is how unique and strong our personal passwords are, and whether we use additional security layers like two-factor authentication.

In this post, I will explain the realities behind these "16 billion password" headlines, how these leaks affect us, and how we can protect ourselves at both individual and corporate levels, drawing from my own experiences. My goal is not to create panic, but to realistically assess the situation and help us take concrete steps.

What Exactly Do These "16 Billion Passwords Leaked" Headlines Mean?

These colossal numbers usually refer to data sets that have been leaked from different platforms over the years and compiled, rather than a single massive hack. For example, 1 million passwords leaked from a forum in 2013 and 5 million passwords leaked from an e-commerce site in 2020 are separate incidents. However, in these compilations, known as "combo lists," different passwords belonging to the same email address, or even different emails belonging to the same password, can be repeated many times.

Most of these lists are massive databases used by attackers for "credential stuffing" attacks. There have been times when I've seen hundreds of failed login attempts per hour on the login screen of one of my side products. Behind these attempts were usually username-password combinations taken from such lists. The currency of the data in these lists is also debatable; they often contain information from 5-10 years ago.

ℹ️ What is Credential Stuffing?

Credential stuffing is the automated process of trying username and password pairs, obtained from a data breach, on other websites or applications. The goal is to gain unauthorized access to accounts by exploiting users' habit of reusing the same password across multiple services.

How Do Leaked Passwords Threaten Our Accounts?

The biggest threat from leaked passwords stems from the problem of password reuse. If your email address mustafa@example.com and password mypasword123 were leaked from a forum, and you use this combination for your banking, email, or social media accounts, then you are at serious risk. Attackers take these "combo lists" and try them on different sites using automated tools. This is like a thief trying a lost key on all doors.

In a client project of mine, I personally observed email and password combinations leaked from a small marketing application being used in attempts to access the company's main ERP system. Fortunately, the ERP had a strong MFA (Multi-Factor Authentication) policy in place, and these attempts failed. However, this shows how real and widespread the risk is. Attackers often try to hide their tracks by using hundreds of different IP addresses and proxies for such attempts.

Here's a simple logic behind a credential stuffing attempt:

import requests

# Leaked username-password list (in a real scenario, this would be much larger)
credentials = [
    ("user1@example.com", "password123"),
    ("user2@example.com", "securepass"),
    ("mustafa@example.com", "mypasword123"),
]

target_login_url = "https://www.targetsite.com/login"

for email, password in credentials:
    payload = {
        "email": email,
        "password": password
    }
    try:
        response = requests.post(target_login_url, data=payload, timeout=5)
        if "login successful" in response.text.lower():
            print(f"[SUCCESSFUL LOGIN] User: {email}, Password: {password}")
            # Further actions could be taken here: getting session cookies, etc.
        elif "invalid credentials" in response.text.lower():
            print(f"[FAILED LOGIN] User: {email}")
        else:
            print(f"[UNKNOWN RESPONSE] User: {email}, Response: {response.status_code}")
    except requests.exceptions.RequestException as e:
        print(f"[ERROR] Request failed for {email}: {e}")

print("Credential stuffing attempts completed.")
Enter fullscreen mode Exit fullscreen mode

This simple Python code attempts to send each username-password pair from a leaked list to the target site. If you use the password mypasword123 for another critical account, that's when the alarm bells should start ringing.

How Do I Protect Myself as an Individual User?

"So, what should I do?" is the first question that comes to mind for all of us. It's not actually very complicated, but it requires discipline. Based on my own experiences, I can suggest a few concrete steps.

First and foremost, using unique and strong passwords for every account is the most fundamental step. This might sound cliché, but it's also the most overlooked rule. I've been using a password manager for years. This allows me to use randomly generated, 20-30 character passwords with special characters for each site. Using a password manager takes the burden of remembering all these passwords off your shoulders. Even during a period when I accidentally wrote sleep 360 into a systemd service for testing purposes in one of my side products and it got OOM-killed, I didn't experience a security risk because I used different passwords for critical system access thanks to my password manager.

Secondly, using two-factor authentication (2FA/MFA) is a must. 2FA is the most effective way to prevent access to your account even if your password is stolen. Even on the operator screens of a production ERP, we required verification via a mobile app, not just a password, to prevent unauthorized access. You can use TOTP (Time-based One-Time Password) with apps like Google Authenticator or Authy, or you can opt for hardware-based FIDO2 keys like YubiKey. SMS-based 2FA is the least secure due to SIM-swap attacks; prefer TOTP or FIDO2 if possible.

Thirdly, using "dark web monitoring" services can be beneficial. These services check if your email address or other personal information is present in leaked databases. This way, you can be notified immediately in case of a leak and change your password. I also regularly check my own email addresses with such services.

Here's a simple example of generating a strong password:

pwgen 24 1
Enter fullscreen mode Exit fullscreen mode

This command generates a single, 24-character, random, and difficult-to-read password. Memorizing such passwords is impossible, which is why a password manager is critically important.

What Should We Do to Ensure Security in a Corporate Environment?

Beyond individual measures, in the large companies I've worked for or in my own projects, we take much more comprehensive steps to ensure corporate security. When developing an internal banking platform or working on a production ERP, not only users but the entire system needed protection.

Multi-Factor Authentication (MFA) policies must be mandatory. From what I've observed, many organizations still rely solely on usernames and passwords. This is unacceptable in 2026. Making MFA mandatory, especially for access to critical systems (ERP, CRM, financial applications), significantly reduces the risk of unauthorized access. For example, in a client project, we strengthened all VPN connections and internal system access with TOTP-based MFA.

Strict Access Control and Authorization (IAM) systems are necessary. It must be clearly defined which user can access which resource, when, and under what conditions. The Least Privilege principle, meaning giving users only the minimum authority necessary to do their job, is essential. For operator screens in a manufacturing plant, I defined access rights only to relevant modules and only during their shifts.

Rate Limiting and Web Application Firewall (WAF) usage makes it harder for attacks to be carried out with automated tools. In the DDoS mitigation layers I've implemented for my own site, I use Nginx as a reverse proxy to limit requests from specific IPs and failed login attempts. This slows down and sometimes completely stops attacks like credential stuffing.

Here's a simple rate limiting configuration with Nginx:

http {
    # zone=mylimit:10m: Create a 10MB memory zone to store request status.
    # This memory can hold the status of 160,000 IP addresses.
    # rate=10r/s: Allow an average of 10 requests per second from each IP address.
    limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;

    server {
        listen 80;
        server_name myapp.com;

        location /login {
            # Limit requests to the /login endpoint according to the mylimit zone.
            # burst=5: Allow up to 5 requests exceeding the average rate (queue them).
            # nodelay: Queued requests are processed immediately without delay (if capacity allows).
            limit_req zone=mylimit burst=5 nodelay;

            proxy_pass http://backend_app_server;
            # Other proxy settings...
        }

        # We can choose not to apply limits for other locations or define different limits.
        location / {
            proxy_pass http://backend_app_server;
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

This Nginx configuration limits requests to the /login endpoint based on the IP address. If more than 10 requests per second come from an IP, Nginx rejects those requests. This is a very effective method to cut down the speed of credential stuffing attacks.

Monitoring and Responding to Leaks: Through the Eyes of a Security Engineer

News of leaks is not just a cause for "panic," but also a trigger for us to take proactive measures. As a security engineer, I constantly follow such news and potential vulnerabilities.

CVE (Common Vulnerabilities and Exposures) tracking and vulnerability management are critically important. We must track new vulnerabilities emerging in Linux kernel modules or the libraries we use (e.g., CVE-2026-31431 related to algif_aead) and patch our systems. Sometimes I also manage such risks by blacklisting kernel modules.

Log analysis and anomaly detection are key to early detection of leaks. In a production ERP, when I see an abnormal increase in the number of failed login attempts or detect a specific user trying to access at unusual hours, I immediately raise an alarm. I regularly review journald logs and define automatic blocking rules with tools like fail2ban. I even meticulously examine specific events, such as a WAL rotation alarm dropping at 03:14 on one of my servers last month, looking for any signs of anomaly.

Here's an example of journalctl output and a fail2ban rule:

# journalctl output: Failed SSH login attempts
Jun 29 10:05:12 myserver sshd[12345]: Failed password for invalid user admin from 192.168.1.100 port 54321 ssh2
Jun 29 10:05:13 myserver sshd[12346]: Failed password for admin from 192.168.1.100 port 54322 ssh2
Jun 29 10:05:14 myserver sshd[12347]: Failed password for admin from 192.168.1.100 port 54323 ssh2
Jun 29 10:05:15 myserver sshd[12348]: Failed password for invalid user root from 192.168.1.101 port 54324 ssh2
Enter fullscreen mode Exit fullscreen mode

Such outputs can be precursors to a brute-force or credential stuffing attempt. We can automatically block these attempts with fail2ban.

# A section in /etc/fail2ban/jail.local
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3  ; Block after 3 failed attempts
bantime = 3600 ; Block for 1 hour
Enter fullscreen mode Exit fullscreen mode

This fail2ban rule protects my server from brute-force attacks by blocking an IP address that makes 3 failed attempts to the SSH service for 1 hour. On my own VPS, I've seen this rule automatically block an average of 50-100 IP addresses per week.

The Future of Password Security: Passwordless Authentication and ZTNA

We all know by now that passwords, especially weak or reused ones, are the weakest link in the security chain. Therefore, the industry is rapidly moving towards passwordless authentication methods.

Passkeys and the FIDO standard are among the most important developments in this area. Passkeys replace passwords with a cryptographic key pair tied to your device. You authenticate with your phone's fingerprint reader or facial recognition system. Because passwords are stored on servers and can be stolen, passkeys store no secrets on the server; this makes them immune to credential stuffing attacks. In my own Android spam application, I am researching passkey integrations to make user authentication more secure.

Zero Trust Network Access (ZTNA) architectures also represent the future in corporate security. It is based on the principle of "verify everything, trust nothing." Even a device within the internal network must authenticate its identity and check its authorization for every access request. This makes network segmentation and access control much more granular. In an internal banking platform, I saw old VPN topologies slowly being replaced by ZTNA solutions.

The Mermaid diagram above illustrates the basic flows of Passkey and ZTNA. With Passkey, access to the application is provided directly after biometric verification on the user's device, while in ZTNA, every access request goes through a broker for device posture and user identity checks. These two approaches aim to address the weaknesses of password-based systems.

Conclusion: Not Panic, But Proactive Measures Needed

News like "16 billion passwords leaked," yes, sounds terrifying. However, the real danger lies not in the magnitude of these numbers, but in how we react to this situation. If you continue to use the same weak password for every account, these leaks pose a real threat to you.

My years of experience show that it's possible to significantly reduce these risks with simple but effective steps. Using strong, unique passwords, relying on password managers, and activating MFA on all your critical accounts are the most important individual steps you can take. On the corporate side, making MFA mandatory, tightening IAM policies, implementing technical controls like rate limiting and WAF, and increasing security awareness are vital. Remember, cybersecurity is not a one-time task, but a continuous process. The steps you take today can save you from a potential disaster tomorrow.

Top comments (0)