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, 7382 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
Peripheriegeräte
Unterschrank für HP Drucker
Tipp von NixVerstehen vor 1 StundePeripheriegeräte

Als kurzen Freitags-Tipp möchte ich gerne meinen neuen Drucker-Unterschrank Modell Amica KS 15423W vorstellen. Das Gerät eignet sich hervorragend ...

Windows 10
Windows 10 - Probleme mit Point-And-Print
Tipp von emeriks vor 1 TagWindows 103 Kommentare

Hi, wir kämpfen z.Z. mit einigen Druckertreibern, welche unter Win10 beim Verbinden eines Druckers von Printserver mit dem Dialog ...

Windows 10

Windows 10 1803 - Ihr Roamingbenutzerprofil wurde nicht vollständig synchronisiert

Anleitung von Deepsys vor 1 TagWindows 101 Kommentar

Bei allen Windows 10 1803 PCs traten Probleme mit den Servergespeicherten Profilen auf. Das Abmelden dauerte sehr lange und ...

Exchange Server
Exchange - Fehler mit 2018-07 Sicherheitsupdate
Tipp von ArnoNymous vor 3 TagenExchange Server7 Kommentare

Hallo, es gibt mal wieder Freude mit den MS-Updates. KB4338814 führt dazu, dass der Exchange keine Mails mehr zustellt. ...

Heiß diskutierte Inhalte
Humor (lol)
Freitagsfrage: Was tun, wenn der Admin der DAU ist?
Frage von VoiperHumor (lol)24 Kommentare

Moin Zusammen, Eine nicht ganz ernst gemeinte Frage an die Außendienstler unter uns. Zusammenfassung: Ein Inhouse Admin ruft bei ...

Exchange Server
Exchange Backup 10 Jahre Aufbewahrung
Frage von arccosExchange Server20 Kommentare

Hallo zusammen. Aktuell beschäftigen mich ein paar Fragen zum Thema Office365/ Exchange. 1.10 Jahre Aufbewahrungspflicht sicherstellen 2.Kann man als ...

Windows Server
W2K16 Essentials: keine Namensauflösung nach der Einrichtung DNS + AD DS
Frage von Ben-WittWindows Server18 Kommentare

Ich versuche bereits seit ca. 4 Wochen einen Server 2016 "Essentials" richtig zu installieren. An diesem Server möchte ich ...

Humor (lol)
Windows 10 - immer für Überraschungen gut
gelöst Frage von HenereHumor (lol)18 Kommentare

Eben nach (beim) installieren der neuesten Updates für 1803 :-) Und sorry fürs Handyfoto, aber der musste sein. Nach ...