|
NetZero ZeroPort 3.0 Weak Encryption Method Vulnerability
Netzero is a free internet service provider which requires its users to run the application ZeroPort in order to log onto the network. The username and password is stored locally in a text file called id.dat and is inadequately encrypted. The weakly encrypted username and password may also be stored in jnetz.prop if the option "Save Password" is enabled. If a malicious user has access to the aforementioned files, they may decrypt the username and password using the exploit provided by Brian Carrier <bcarrier@atstake.com> or by using a simple substitution cipher. Taken from the @Stake/L0pht advisory, Brian Carrier explains how to decrypt the username and password: The classical substitution cipher is a 1-to-1 mapping between characters where each plaintext character is replaced by one ciphertext character. For example, let P_i be the plaintext character in location 'i' and C_j be the ciphertext character in location 'j', then C_i is the character that P_i maps to. The NetZero substitution cipher replaces each plaintext character by two ciphertext characters, but the two ciphertext characters are not stored together. When substituting character P_i of a password of length 'n', the first ciphertext character is C_i and the second character is C_n+i. The two ciphertext characters are derived from the following table: | 1 a M Q f 7 g T 9 4 L W e 6 y C --+---------------------------------- g | ` a b c d e f g h i j k l m n o T | p q r s t u v w x y z { | } ~ f | @ A B C D E F G H I J K L M N O 7 | P Q R S T U V W X Y Z [ \ ] ^ _ Q | 0 1 2 3 4 5 6 7 8 9 : ; < = > ? M | SP ! " # $ % & ' ( ) * + , - . / The characters inside the table represent the ASCII plaintext characters and SP represents a space. When encrypting a string, P, of length 'n', find each character in the table and place the column header into C_i and place the row header into C_n+i. For example: E(a) = ag E(aa) = aagg E(aqAQ1!) = aaaaaagTf7QM E(`abcdefghijklmno) = 1aMQf7gT94LWe6yCgggggggggggggggg When decrypting a string, C, of length '2n', then P_i will be the element in the above table where the column headed by C_i and the row headed by C_n+i intersect. For example: D(af) = A D(aaff) = AA D(aaMMQQfgfgfg) = AaBbCc |
|
|
Privacy Statement |