How Windows 95 Stored Network Login Credentials

Windows 95 introduced local credential caching to simplify access to password-protected network shares, domains, and remote services. This article examines how the operating system handled network authentication through Password List (.PWL) files, the cryptographic mechanisms used to protect them, the critical security flaws present in the initial release, and how Microsoft addressed these vulnerabilities.

The Password List (.PWL) Architecture

Windows 95 stored local and network credentials in individual files with the .PWL extension, located in the primary C:\WINDOWS directory. Each user profile had its own dedicated file named after the user’s logon name (for example, USER.PWL).

The .PWL file functioned as an encrypted local database that stored cached authentication data, including:

  • Microsoft Network domain and workgroup credentials
  • Password-protected network file shares and print shares
  • Novell NetWare bindery and directory service credentials
  • Dial-Up Networking (Remote Access Service / RAS) connection passwords

Master Password Authentication

The entire credential caching mechanism relied on the user's primary Windows logon password to act as a master key.

  1. Logon: When a user booted the computer and entered their Windows username and password, the operating system hashed this master password.
  2. Decryption: The resulting hash acted as the decryption key to unlock the user's corresponding .PWL file into protected system memory.
  3. Automatic Passthrough: When the user attempted to access an authenticated network resource (such as an SMB share), Windows 95 checked the memory cache. If a matching resource credential existed, it silently provided the stored username and password across the network without prompting the user.
  4. Storage: If the user accessed a new password-protected share and checked the "Save this password in your password list" box, the operating system encrypted the new resource credentials and appended them to the .PWL file.

Cryptographic Weaknesses in the Original Release

The retail release of Windows 95 (1995) contained a critical cryptographic flaw in how .PWL files were generated and encrypted.

Although the system used an algorithm derived from RC4, the implementation was fundamentally flawed. The key derivation function failed to provide adequate entropy, and the encryption process used predictable XOR operations tied directly to the length of the stored credentials.

Security researchers discovered that the encryption could be broken rapidly without requiring the master password. Tools such as glide.exe emerged, allowing an attacker with access to a target machine to decrypt all stored network passwords in seconds.

The Microsoft Patch

In late 1995, Microsoft issued a security advisory and an update package centered around an updated MSNET32.DLL file (commonly distributed as pwlupdate.exe).

The update replaced the broken algorithm with a standardized 128-bit RC4 encryption implementation. Installing the update invalidated existing .PWL files, forcing users to delete their old files and re-cache their credentials under the stronger algorithm.

Fundamental System Limitations

Even with patched encryption, credential storage in Windows 95 remained inherently insecure compared to Windows NT:

  • No File-Level Access Controls: Windows 95 ran on FAT16 (and later FAT32) file systems, which lacked Access Control Lists (ACLs). Any user on the machine—or an attacker booting from a floppy disk—could copy .PWL files for offline cracking.
  • Deletable Credentials: If a user forgot their Windows logon password, deleting the .PWL file simply removed the prompt, allowing anyone physical access to log in with an empty password and create a new credential file.