Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Hohes Sicherheitsrisiko im Sessionmanagment PHP 5.2.0 session.save path safe mode und open basedir bypass

Mitglied: gnarff

gnarff (Level 2) - Jetzt verbinden

09.12.2006, aktualisiert 07.01.2009, 7429 Aufrufe

Autor: Maksymilian Arciemowicz (SecurityReason)
Verfasst am: 02.10.2006
Veroeffentlicht am: 08.12.2006
SecurityAlert Id: 43
Sicherheitsrisiko: Hoch
Betrifft: PHP 5.2.0
Original-Advisory : http://securityreason.com/achievement_securityalert/43,
bugtraq 08.12.2006, 2:59pm
Vendor: http://www.php.net

Beschreibung:

Durch Session Support in PHP besteht die Moeglichkeit Zugriffsdaten auch bei nachfolgenden
Sessions zu schuetzen. Dabei wird einen Benutzer eine persoenliche ID [unique ID],
auch Session-ID gennant, zugewiesen. Die Session-ID wird in einem
Cookie auf dem Rechner des Benutzers abgelegt und in der URL angezeigt.

session.save_path definiert den Parameter der an den save handler uebergeben wird.
Bei Benutzung des standard files handler, ist dies der Pfad wo die Dateien erstellt werden.
Standardmaessig in /tmp.
Vgl. session_save_path().

Als Option gibt es den Parameter N der die Anzahl der Verzeichnisebenen bestimmt,
auf die die session files verteilt werden.

Ein '5;/tmp' z.B. kann dazu fuehren, dass ein session file erstellt wird, an einem Ort wie
/tmp/4/b/1/e/3/sess_4b1e384ad74619bd212e236e52a5a174If .

Um N benutzen zu koennen, muessen zunaechtst alle diese Verzeichnisse
geschaffen werden

Dafuer gibt es ein shell-script in ext/session, mit Namen mod_files.sh.

Zu beachten ist, dass wenn die Option N benutzt wird und groesser als 0
ist, funktioniert die automatische Speicherbereinigung nicht mehr.
Vgl. php.ini fuer weiter Informationen

Ebenfalls ist sicherzustellen, dass bei der Benutzung des Parameters N,
session.save_path in "quotes" einzubetten, weil der Separator
(;) auch fuer die comments in der php.ini benutzt wird.

1. session.save_path safe mode und open basedir bypass

Der session.save_path kann festgelegt werden mit der ini_set(), session_save_path() Funktion.
In session.save_path muss der Pfad zu dem Ort angegeben werden wo die tmp-files gespeichert werden sollen
Der Syntax fuer session.save_path kann so aussehen:

[/PATH]

oder

[N;/PATH]

N - kann eine Zeichenkette sein.

Beispiele:

1. session_save_path("/DIR/WHERE/YOU/HAVE/ACCESS")
2. session_save_path("5;/DIR/WHERE/YOU/HAVE/ACCESS")

und

3. session_save_path("/DIR/WHERE/YOU/DONT/HAVE/ACCESS\0;/DIR/WHERE/YOU/HAVE/ACCESS")


01.
-- -1477-1493--- Code from PHP520 ext/session/session.c [START] 
02.
PHP_FUNCTION(session_save_path) 
03.
04.
	zval **p_name; 
05.
	int ac = ZEND_NUM_ARGS(); 
06.
	char *old; 
07.
 
08.
	if (ac < 0 || ac > 1 || zend_get_parameters_ex(ac, &p_name) == FAILURE) 
09.
		WRONG_PARAM_COUNT; 
10.
	 
11.
	old = estrdup(PS(save_path)); 
12.
 
13.
	if (ac == 1) { 
14.
		convert_to_string_ex(p_name); 
15.
		zend_alter_ini_entry("session.save_path", sizeof("session.save_path"), Z_STRVAL_PP(p_name), Z_STRLEN_PP(p_name), PHP_INI_USER, PHP_INI_STAGE_RUNTIME); 
16.
17.
	 
18.
	RETVAL_STRING(old, 0); 
19.
20.
- -1477-1493--- Code from PHP520 ext/session/session.c [END] 
21.
 
22.
Die Werte werden an hash_memory uebergeben, doch bevor dies passiert ueberpruefen safe_mode and open_basedir Diese. 
23.
Wenn die Session dann gestartet wird, z.B. mit  session_start(),  
24.
wird der Wert von session.save_path von function PS_OPEN_FUNC(files) ueberprueft.. 
25.
 
26.
-- -242-300--- Code from PHP520 ext/session/mod_files.c [START] 
27.
PS_OPEN_FUNC(files) 
28.
29.
	ps_files *data; 
30.
	const char *p, *last; 
31.
	const char *argv[3]; 
32.
	int argc = 0; 
33.
	size_t dirdepth = 0; 
34.
	int filemode = 0600; 
35.
 
36.
	if (*save_path == '\0') { 
37.
		/* if save path is an empty string, determine the temporary dir */ 
38.
		save_path = php_get_temporary_directory(); 
39.
40.
	 
41.
	/* split up input parameter */ 
42.
	last = save_path; 
43.
	p = strchr(save_path, ';'); 
44.
	while (p) { 
45.
		argv[argc++] = last; 
46.
		last = ++p; 
47.
		p = strchr(p, ';'); 
48.
		if (argc > 1) break; 
49.
50.
	argv[argc++] = last; 
51.
 
52.
	if (argc > 1) { 
53.
		errno = 0; 
54.
		dirdepth = (size_t) strtol(argv[0], NULL, 10); 
55.
		if (errno == ERANGE) { 
56.
			php_error(E_WARNING,  
57.
					"The first parameter in session.save_path is invalid"); 
58.
			return FAILURE; 
59.
60.
61.
	 
62.
	if (argc > 2) { 
63.
		errno = 0; 
64.
		filemode = strtol(argv[1], NULL, 8); 
65.
		if (errno == ERANGE || filemode < 0 || filemode > 07777) { 
66.
			php_error(E_WARNING,  
67.
					"The second parameter in session.save_path is invalid"); 
68.
			return FAILURE; 
69.
70.
71.
	save_path = argv[argc - 1]; 
72.
 
73.
	data = emalloc(sizeof(*data)); 
74.
	memset(data, 0, sizeof(*data)); 
75.
	 
76.
	data->fd = -1; 
77.
	data->dirdepth = dirdepth; 
78.
	data->filemode = filemode; 
79.
	data->basedir_len = strlen(save_path); 
80.
	data->basedir = estrndup(save_path, data->basedir_len); 
81.
	 
82.
	PS_SET_MOD_DATA(data); 
83.
	 
84.
	return SUCCESS; 
85.
86.
- -242-300--- Code from PHP520 ext/session/mod_files.c [END]

In session.save_path ist ein NULL byte vor dem ; gesetzt,
strchr() kann; nicht lesen und der Pfad ist dann /DIR/WHERE/YOU/DONT/HAVE/ACCESS.

Dieses Problem entseht, weil safe_mode und open_basedir den Pfad nach dem ; ueberpruefen.
Daher ist es noetig den Pfad nach dem ; korrekt zu bestimmen!

2. Wie man das Problem fixen kann
http://cvs.php.net/viewcvs.cgi/php-src/NEWS

saludos
gnarff
Ähnliche Inhalte
CMS

WordPress mit Fehler - PHP Warning - file exists open basedir restriction

Frage von Rene1976CMS5 Kommentare

Hallo, kennt jemand die beiden Fehler und wie kann ich sie beheben? Wir haben eine Win 2008 R2 Root ...

Server-Hardware

Nach Serverreboot lsi megaraid Controller in safe mode

gelöst Frage von jocologneServer-Hardware4 Kommentare

Hallo Gemeinde, lass Hilfe regnen! Habe Heute einen neuen (Supermicro mit LSI Megaraid SAS 9260-4i) Server aufgesetzt und nach ...

DSL, VDSL

FB als DSL-Modem - höheres Angriffsrisiko für die FB

gelöst Frage von 118184DSL, VDSL18 Kommentare

Hallo Leute, ich werde mir wahrscheinlich bald einen Mikrotik Cloud Core Router zulegen, brauche für meine VDSL-Leitung logischerweise ein ...

Neue Wissensbeiträge
Linux Netzwerk

Installation eines Logservers mit Loganalyzer als Debian-VM auf Hyper-V

Anleitung von lcer00 vor 18 StundenLinux Netzwerk

Zuerst sei auf den schönen Beitrag von aqui hier im Forum verwiesen, in dem die loganalyzer-installation bereits beschrieben ist: ...

Humor (lol)
Antennagate 2018
Information von magicteddy vor 18 StundenHumor (lol)2 Kommentare

Da haut der angekaute Elektronikhersteller die teuersten Geräte auf den Markt und bekommt anscheinend die Basics mal wieder nicht ...

Datenschutz

Die Datenkrake Google verlängert ihr Arme mal wieder ein wenig, automatische Anmeldung

Tipp von magicteddy vor 1 TagDatenschutz4 Kommentare

Benutzer mit einem Google Account und gespeicherten Zugangsdaten werden von chrome 69 automatisch bei Google angemeldet, natürlich alles zum ...

Verschlüsselung & Zertifikate
Meine Wissenssammlung zu Bitlocker
Erfahrungsbericht von DerWoWusste vor 2 TagenVerschlüsselung & Zertifikate3 Kommentare

Die Motivation für diesen Beitrag waren die vielen Posts rund um dieses Thema, die deutlich machen, wie viele Einzelaspekte ...

Heiß diskutierte Inhalte
Windows Netzwerk
VPN geht, RD nicht
Frage von bigeasyWindows Netzwerk19 Kommentare

Hallo zusammen Ich hab hier ein Problem mit einer Remotedesktop-Verbindung, ich hoffe, jemand kann mir hier bitte weiterhelfen: Wähle ...

Firewall
Wesyb Offline
Frage von DkuehlbornFirewall14 Kommentare

Hallo Kollegen, ein Kunde hat von Wesyb die Sicherheitslösung im Einsatz. Seit August scheint deren Internetseite nicht mehr verfügbar ...

Video & Streaming
DVD auf Festplatte sichern
Frage von Thor01Video & Streaming13 Kommentare

Hallo, mittlerweile hat meine DVD Sammlung ein alter erreicht wo die eine oder andere DVD schon das Zeitliche gesegnet ...

Video & Streaming
Film aus Mediathek vom Laptop aufs TV streamen?
Frage von imebroVideo & Streaming12 Kommentare

Hallo, ich möchte gerne einen Film - z.B. aus der Mediathek des ZDF - auf mein TV-Gerät streamen und ...