In computer network security, session fixation attacks attempt to
exploit
Exploit means to take advantage of something (a person, situation, etc.) for one's own end, especially unethically or unjustifiably.
Exploit can mean:
* Exploitation of natural resources
*Exploit (computer security)
* Video game exploit
*Exploita ...
the vulnerability of a system that allows one person to fixate (find or set) another person's
session identifier
In computer science, a session identifier, session ID or session token is a piece of data that is used in network communications (often over HTTP) to identify a session, a series of related message exchanges. Session identifiers become necessary ...
. Most session fixation attacks are web based, and most rely on session identifiers being accepted from
URLs (
query string
A query string is a part of a uniform resource locator (URL) that assigns values to specified parameters. A query string commonly includes fields added to a base URL by a Web browser or other client application, for example as part of an HTML, cho ...
) or POST data.
Attack scenarios
Alice
Alice may refer to:
* Alice (name), most often a feminine given name, but also used as a surname
Literature
* Alice (''Alice's Adventures in Wonderland''), a character in books by Lewis Carroll
* ''Alice'' series, children's and teen books by ...
has an account at the bank
http://unsafe.example.com/
Mallory intends to target Alice's money from her bank.
Alice has a reasonable level of trust in Mallory, and will visit links Mallory sends her.
A simple attack scenario
Straightforward scenario:
# Mallory has determined that
http://unsafe.example.com/
accepts any session identifier, accepts session identifiers from query strings and has no security validation.
http://unsafe.example.com/
is thus not secure.
# Mallory sends Alice an e-mail: "Hey, check this out, there is a cool new account summary feature on our bank,
http://unsafe.example.com/?SID=I_WILL_KNOW_THE_SID
". Mallory is trying to fixate the SID to
I_WILL_KNOW_THE_SID
.
# Alice is interested and visits
http://unsafe.example.com/?SID=I_WILL_KNOW_THE_SID
. The usual log-on screen pops up, and Alice logs on.
# Mallory visits
http://unsafe.example.com/?SID=I_WILL_KNOW_THE_SID
and now has unlimited access to Alice's account.
Attack using server generated SID
A misconception is that if a server only accepts server-generated session identifiers, it is safe from fixation. This is false.
Scenario:
# Mallory visits
http://vulnerable.example.com/
and checks which SID is returned. For example, the server may respond:
Set-Cookie: SID=0D6441FEA4496C2
.
# Mallory is now able to send Alice an e-mail: "Check out this new cool feature on our bank,
http://vulnerable.example.com/?SID=0D6441FEA4496C2
."
# Alice logs on, with fixated session identifier
SID=0D6441FEA4496C2
.
# Mallory visits
http://vulnerable.example.com/?SID=0D6441FEA4496C2
and now has unlimited access to Alice's account.
Attacks using cross-subdomain cookie
This type of attack is similar to a cross-site cookie attack except that, it does not rely on the vulnerability of the user's browser. Rather, it relies on the fact that wildcard cookies can be set by a subdomain and, that those cookies may affect other subdomains.
Scenario:
# A web site
www.example.com
hands out subdomains to untrusted third parties
# One such party, Mallory, who now controls
evil.example.com
, lures Alice to his site
# A visit to
evil.example.com
sets a session cookie with the domain
.example.com
on Alice's browser
# When Alice visits
www.example.com
this cookie will be sent with the request and Alice will have the session specified by Mallory's cookie.
# If Alice now logs on, Mallory can use her account.
When this attack is complete, Mallory can gain access to
www.example.com
as Alice.
It is not essential that a user login to exploit session fixation attacks
Article about unauthenticated Session-Fixation attacks
/ref> and, although these unauthenticated attacks are not constrained to cross-sub-domain cookie attacks, the implications of sub-domain attacks are relevant to these unauthenticated scenarios. For example, Mallory may provide a URL from their evil site, fixating a session into an unauthenticated scenario, and use those techniques to exploit their target. This includes scenarios exploiting both the unauthenticated scenarios (e.g. forms or registration) as well as the ability to feed the user an established session to bypass the login completely.
Consider, for example, that Mallory may create a user ''A1ice'' on ''www.example.com'' and login that user to capture a current, valid session identifier. Mallory then entraps Alice with a URL from ''evil.example.com'' which fixates that session cookie in Alice's browser (as described above) and redirects to ''www.example.com'' for finalizing a particular transaction (or, in fact, broader use). Mallory is thus able to ghost the session from their original login, scraping data and executing operations as 'A1ice' on 'www.example.com'. If Alice was successfully duped and saved her credit card to the account, Mallory might then make purchases using that card.
Countermeasures
Do not accept session identifiers from GET / POST variables
Session identifiers in URL (query string, GET variables) or POST variables are not recommended as they simplify this attack – it is easy to make links or forms that set GET / POST variables.
* The SID is leaked to other people as users cut & paste "interesting links" from the address bar into chats, forums, communities, etc.
* The SID is stored in many places (browser history log, web server log, proxy logs, ...)
Note: Cookies are shared between tabs and popped up browser windows. If your system requires to be hit with the same domain (www.example.com/?code=site1 and www.example.com/?code=site2 ), cookies may conflict with one another between tabs.
It may be required to send the session identifier on the URL in order to overcome this limitation. If possible use site1.example.com or site2.example.com so there is no domain conflicts in the cookies. This may incur costs with extra SSL certificates.
This behavior can be seen on many sites by opening another tab and trying to do side by side search results. One of the sessions will become unusable.
Best solution: Identity confirmation
This attack can be largely avoided by changing the session ID when users log in. If every request specific to a user requires the user to be authenticated with ("logged into") the site, an attacker would need to know the id of the victim's log-in session. When the victim visits the link with the fixed session id, however, they will need to log into their account in order to do anything "important" as themselves. At this point, their session id will change, and the attacker will not be able to do anything "important" with the anonymous session ID.
A similar technique can be used to solve the phishing
Phishing is a type of social engineering where an attacker sends a fraudulent (e.g., spoofed, fake, or otherwise deceptive) message designed to trick a person into revealing sensitive information to the attacker or to deploy malicious softwar ...
problem. If the user protects their account with two passwords, then it can be solved to a great extent.
This technique is also useful against cross-site request forgery
Cross-site request forgery, also known as one-click attack or session riding and abbreviated as CSRF (sometimes pronounced ''sea-surf'') or XSRF, is a type of malicious exploit of a website or web application where unauthorized commands are submitt ...
attacks.
Solution: Store session identifiers in HTTP cookies
The session identifier on most modern systems is stored by default in an HTTP cookie
HTTP cookies (also called web cookies, Internet cookies, browser cookies, or simply cookies) are small blocks of data created by a web server while a user is browsing a website and placed on the user's computer or other device by the user's ...
, which has a moderate level of security as long as the session system disregards GET/POST values. However, this solution is vulnerable to cross-site request forgery
Cross-site request forgery, also known as one-click attack or session riding and abbreviated as CSRF (sometimes pronounced ''sea-surf'') or XSRF, is a type of malicious exploit of a website or web application where unauthorized commands are submitt ...
, and it does not meet the statelessness requirement of REST.
Solution: Utilize SSL / TLS session identifier
When enabling HTTPS
Hypertext Transfer Protocol Secure (HTTPS) is an extension of the Hypertext Transfer Protocol (HTTP). It is used for secure communication over a computer network, and is widely used on the Internet. In HTTPS, the communication protocol is e ...
security, some systems allow applications to obtain the SSL / TLS session identifier. Use of the SSL/TLS session identifier is very secure, but many web development languages do not provide robust built-in functionality for this.
Regenerate SID on each request
A countermeasure against session fixation is to generate a new session identifier (SID) on each request. If this is done, then even though an attacker may trick a user into accepting a known SID, the SID will be invalid when the attacker attempts to re-use the SID. Implementation of such a system is simple, as demonstrated by the following:
* Get previous Session Identifier OLD_SID
from HTTP request.
* If OLD_SID
is null, empty, or no session with SID=OLD_SID
exists, create a new session.
* Generate new session identifier NEW_SID
with a secure random number generator.
* Let session be identified by SID=NEW_SID
(and no longer by SID=OLD_SID
)
* Transmit new SID to client.
Example:
If Mallory successfully tricks Alice into visiting http://victim.example.com/?SID=I_KNOW_THE_SID
, this HTTP request is sent to victim.example.com
:
GET /?SID=I_KNOW_THE_SID HTTP/1.1
Host: victim.example.com
victim.example.com
accepts SID=I_KNOW_THE_SID
, which would normally be bad. However, victim.example.com
is secure because it performs session regeneration. victim.example.com
gets the following response:
HTTP/1.1 200 OK
Set-Cookie: SID=3134998145AB331F
Alice will now use SID=3134998145AB331F
that is unknown to Mallory, and SID=I_KNOW_THE_SID
is invalid. Mallory is thus unsuccessful in the session fixation attempt.
Unfortunately session regeneration is not always possible. Problems are known to occur when third-party software such as ActiveX or Java applets are used, and when browser plugins communicate with the server. Third-party software could cause logouts, or the session could be split into two separate sessions.
If the implementation of sessions includes transmitting the SID through GET or POST variables, then this might also render the "back" button in most browsers unusable, as the user would then be using an older, invalid, session identifier from a previous request.
Accept only server-generated SIDs
One way to improve security is not to accept session identifiers that were not generated by the server. However, as noted above, this does not prevent all session fixation attacks.
if (!isset($_SESSIONSERVER_GENERATED_SID'
Server may refer to:
Computing
*Server (computing), a computer program or a device that provides functionality for other programs or devices, called clients
Role
* Waiting staff, those who work at a restaurant or a bar attending customers and su ...
)
session_regenerate_id(); // Generate a new session identifier
$_SESSIONSERVER_GENERATED_SID'
Server may refer to:
Computing
*Server (computing), a computer program or a device that provides functionality for other programs or devices, called clients
Role
* Waiting staff, those who work at a restaurant or a bar attending customers and su ...
= true;
Logout function
A logout function is useful as it allows users to indicate that a session should not allow further requests. Thus attacks can only be effective while a session is active. Note that the following code performs no Cross-site request forgery
Cross-site request forgery, also known as one-click attack or session riding and abbreviated as CSRF (sometimes pronounced ''sea-surf'') or XSRF, is a type of malicious exploit of a website or web application where unauthorized commands are submitt ...
checks, potentially allowing an attacker to force users to log out of the web application.
if (logout)
Time-out old SIDs
This defense is simple to implement and has the advantage of providing a measure of protection against unauthorized users accessing an authorized user's account by using a machine that may have been left unattended.
Store a session variable containing a time stamp of the last access made by that SID. When that SID is used again, compare the current timestamp with the one stored in the session. If the difference is greater than a predefined number, say 5 minutes, destroy the session. Otherwise, update the session variable with the current timestamp.
Destroy session if Referrer is suspicious
When visiting a page, most web browsers will set the Referrer header – the page that contained the link that you followed to get to this page.
When the user is logged into a site that is not likely to be linked to from outside that site (e.g., banking websites, or webmail
Webmail (or web-based email) is an email service that can be accessed using a standard web browser. It contrasts with email service accessible through a specialised email client software. Examples of webmail providers are 1&1 Ionos, AOL Mail, ...
), and the site is not the kind of site where users would remain logged in for any great length of time, the Referrer should be from that site. Any other Referrer should be considered suspicious. However, if the originating request is from a HTTPS page, then the referrer will be stripped, so you cannot depend on this security system.
For example, http://vulnerable.example.com/
could employ the following security check:
if (strpos($_SERVERHTTP_REFERER'
The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, w ...
'http://vulnerable.example.com/') ! 0)
session_regenerate_id(); // Generate a new session identifier
Verify that additional information is consistent throughout session
One way to further improve security is to ensure that the user appears to be the same end user (client). This makes it a bit harder to perform session fixation and other attacks.
As more and more networks begin to conform to RFC 3704 and other anti- spoofing practices, the IP address
An Internet Protocol address (IP address) is a numerical label such as that is connected to a computer network that uses the Internet Protocol for communication.. Updated by . An IP address serves two main functions: network interface ident ...
becomes more reliable as a "same source" identifier. Therefore, the security of a web site can be improved by verifying that the source IP address is consistent throughout a session.
This could be performed in this manner:
if ($_SERVERREMOTE_ADDR'
Remote may refer to:
Arts, entertainment, and media
* ''Remote'' (1993 film), a 1993 movie
* ''Remote'' (2004 film), a Tamil-language action drama film
* ''Remote'' (album), a 1988 album by Hue & Cry
* Remote (band), ambient chillout band
* ' ...
!= $_SESSION PREV_REMOTEADDR'
session_regenerate_id(); // Generate a new session identifier
$_SESSION PREV_REMOTEADDR'= $_SERVERREMOTE_ADDR'
Remote may refer to:
Arts, entertainment, and media
* ''Remote'' (1993 film), a 1993 movie
* ''Remote'' (2004 film), a Tamil-language action drama film
* ''Remote'' (album), a 1988 album by Hue & Cry
* Remote (band), ambient chillout band
* ' ...
However, there are some points to consider before employing this approach.
* Several users may share one IP address. It is not uncommon for an entire building to share one IP address using NAT
Nat or NAT may refer to:
Computing
* Network address translation (NAT), in computer networking
Organizations
* National Actors Theatre, New York City, U.S.
* National AIDS trust, a British charity
* National Archives of Thailand
* National ...
.
* One user may have an inconsistent IP address. This is true for users behind proxies (such as AOL customers). It is also true for some mobile/roaming users, as well as users that are behind load balanced Internet connections. Users with IPv6 Privacy Extensions enabled may also change their IPv6 privacy addresses at any time.
* It will not work reliably with dual stack clients as requests will move between IPv4 and IPv6.
* It will not work reliably with mobile users, as mobile users roam between addresses as well.
For some sites, the added security outweighs the lack of convenience, and for others it does not.
User Agent
Browsers identify themselves by "User-Agent" HTTP headers. This header does not normally change during use; it would be extremely suspicious if that were to happen. A web application might make use of User-Agent detection in attempt to prevent malicious users from stealing sessions. This however is trivial to bypass, as an attacker can easily capture the victim's user-agent with their own site and then spoof it during the attack. This proposed security system is relying on security through obscurity
Security through obscurity (or security by obscurity) is the reliance in security engineering on design or implementation secrecy as the main method of providing security to a system or component.
History
An early opponent of security through ob ...
.
if ($_SERVERHTTP_USER_AGENT'
The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, w ...
!= $_SESSION PREV_USERAGENT'
session_regenerate_id(); // Generate a new session identifier
$_SESSION PREV_USERAGENT'= $_SERVERHTTP_USER_AGENT'
The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, w ...
However, there are some points to consider before employing this approach.
* Several users may have same browser User Agent in Internet café
An Internet café, also known as a cybercafé, is a café (or a convenience store or a fully dedicated Internet access business) that provides the use of computers with high bandwidth Internet access on the payment of a fee. Usage is general ...
.
* Several users may have same default browser (ex: Internet Explorer 6 in Windows XP SP3 or mini browser in mobile phone).
But User Agent may change legally in few cases. Following examples are the same users.
* A smartphone whose screen rotated since the last request
**
**
* Internet Explorer compatibility mode:
**
**
* A user accessing a web site through a proxy distributed across multiple servers, not all of which are upgraded to the latest version of the proxy software
**
**
Defense in depth
Defense in depth
Defence in depth (also known as deep defence or elastic defence) is a military strategy that seeks to delay rather than prevent the advance of an attacker, buying time and causing additional casualties by yielding space. Rather than defeating ...
is to combine several countermeasures. The idea is simple: if one obstacle is trivial to overcome, several obstacles could be very hard to overcome.
A defense in depth strategy could involve:
* Enable HTTPS (to protect against other problems)
* Correct configuration (do not accept external SIDs, set time-out, etc.)
* Perform session_regeneration, support log-out, etc.
HTTP referrers are not passed with SSL/TLS (HTTPS).
The following PHP script demonstrates several such countermeasures combined in a defense in depth manner:
if (isset($_GET LOGOUT' , ,
$_SERVERREMOTE_ADDR'
Remote may refer to:
Arts, entertainment, and media
* ''Remote'' (1993 film), a 1993 movie
* ''Remote'' (2004 film), a Tamil-language action drama film
* ''Remote'' (album), a 1988 album by Hue & Cry
* Remote (band), ambient chillout band
* ' ...
! $_SESSION PREV_REMOTEADDR', ,
$_SERVERHTTP_USER_AGENT'
The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, w ...
! $_SESSION PREV_USERAGENT'
session_regenerate_id(); // Generate a new session identifier
$_SESSION PREV_USERAGENT'= $_SERVERHTTP_USER_AGENT'
The Hypertext Transfer Protocol (HTTP) is an application layer protocol in the Internet protocol suite model for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web, w ...
$_SESSION PREV_REMOTEADDR'= $_SERVERREMOTE_ADDR'
Remote may refer to:
Arts, entertainment, and media
* ''Remote'' (1993 film), a 1993 movie
* ''Remote'' (2004 film), a Tamil-language action drama film
* ''Remote'' (album), a 1988 album by Hue & Cry
* Remote (band), ambient chillout band
* ' ...
Note that this code checks the current REMOTE_ADDR (the user's IP address) and User-agent against the REMOTE_ADDR and User-agent of the previous request. This might be inconvenient for some sites as discussed above.
See also
* Session poisoning
* Privilege escalation
References
External links
Security Corner: Session Fixation
Session Fixation Vulnerability in Web-based Applications
(PDF)
* Session Fixation Video example
The Web Application Security Consortium Threat Classification
{{DEFAULTSORT:Session Fixation
Web security exploits