Link to home
Start Free TrialLog in
Avatar of EricHoma
EricHomaFlag for United States of America

asked on

How To Secure Cookies CFID and CFTOKEN?

I have a web site running on an MX7 server with IIS.  It is an SSL only site and going to the site url forwards you to SSL mode.  The site is being security tested by some firm in Japan and the only thing that they say is a security risk is that my cookies are not secure.  They say to set the secure flag when creating cookies.  The cookies that they describe are CFID and CFTOKEN which I believe are created automatically within the application framework.  Anybody have any hints on how to make these secure?
ASKER CERTIFIED SOLUTION
Avatar of Plucka
Plucka
Flag of Australia image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of EricHoma

ASKER

For some reason they are flaggin it.  I wonder if there is any way to test the cookie or look at it on my local machine to see if it is secure.  I would suspect that it might be encrypted.  Let's see if anyone else has a comment on this. Thanks!
But the thing is, the cookies are only CFID and CFTOKEN they hold no data and are only a reference to a variable set on the server. So I don't see how there is a security issue.

The <CFCOOKIE has the secure setting, which works when putting data in via SSL.
Avatar of _agx_
>  I wonder if there is any way to test the cookie or look at it on my local machine to see if it is secure.

You can test the cookies in Firefox - Tools > Options > Show Cookies.  Check the "Send For" type. Is it Encrypted connections only or Any type of connection
> So I don't see how there is a security issue.

Someone could sniff your CFID and CFTOKEN and use it to hijack your session.  
I also believe that there is no security risk.  The problem is that the security team of a very large Japanese electronics company is running a test with some sort of software that is flagging the cookies as not being secure.
I strongly suggest you read up on session hijacking.  If the application is not well structured, it can often be a trivial matter to hijack someone else's session. This means you now have access to _all_ of that person's session information.  Imagine if it contained credit card information?
Thanks for your comments.  It seems that I was creating the session using the application.cfm file before I was forwarding to SSL mode.  I must forward to SSL mode and then create the session.
I noticed that the "Accepted Solution" for this question suggests that the CFID and CFTOKEN cookies are automatically set to secure when SSL is used.  We are getting the same vulnerability notification from McAffe Secure.  When I tested my website through Firefox as suggested by aqx, indeed the cookies was marked as not secure.

I have 2 questions:
1) Has anybody found a valid solution for this problem?
2) How do I request that the "Approve Solution" be disapproved since it is incorrect?
You can reset the CFID and CFTOKEN with the cfcookie tag and set the secure attribute to "YES".  I would prefer to find a solution that is handled by the  ColdFusion Application Service automatically, but this is a valid work around.
<cfif IsDefined("Cookie.cfID") AND IsDefined("Cookie.cfToken")>
	<cfset Variables.cfID_local = Cookie.cfID>
	<cfset Variables.cfToken_local = Cookie.cfToken>
	<cfcookie name="cfID" value="#Variables.cfID_local#" secure="Yes">
	<cfcookie name="cfToken" value="#Variables.cfToken_local#" secure="Yes">
</cfif>

Open in new window

Avatar of zeph001
zeph001

This is what I use to keep my cookies secure.
You need to set the ALL of your cookies (not just CFID and CFTOKEN) to be secure...

If you are using the APPLICATION.CFC template, then you should put some code in the onSessionStart AND in the onRequestStart

Basically just just call <cfcookie> tag for each cookie and make sure to set the SECURE attribute to yes.

To secure the JSESSIONID (which is important), make sure to explicitly set it with a <cfcookie> tag and set the value to be SESSION.SESSIONID (since the JSESSIONID value is the same as SESSION.SESSIONID).

I did these things to get my code to pass the IBM Rational AppScan