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.
- Logon: When a user booted the computer and entered their Windows username and password, the operating system hashed this master password.
- Decryption: The resulting hash acted as the
decryption key to unlock the user's corresponding
.PWLfile into protected system memory. - 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.
- 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
.PWLfile.
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
.PWLfiles for offline cracking. - Deletable Credentials: If a user forgot their
Windows logon password, deleting the
.PWLfile simply removed the prompt, allowing anyone physical access to log in with an empty password and create a new credential file.