Active Content Filtering (ACF) mechanism that is implemented in IBM iNotes 9 and an official This post describes a critical bypass of the(ACF) mechanism that is implemented in IBM iNotes to avoid the inclusion of malicious HTML tags as part of emails. The bug has been identified during a web application penetration test, and can be exploited to perform stored Cross-Site Scripting (XSS) attacks. The bypass has been successfully verified withand an official bulletin and fix have been released on August 1st, 2013.





From zero to Domino admin in a matter of hours



Early this spring I have been asked to assess the security of the mail infrastructure owned by a big company here in Italy. Pentesting the Domino/Notes/iNotes ecosystem is nowadays a piece of cake because of the large amount of publicly available documentation, advisories and tools.



If you are interested in testing this kind of infrastructure, I would recommend the following resources.



First of all, Marco Ivaldi's names.nsf web resource, the tool extracts the desired information disclosed by the hidden attribute named HTTPPassword. The extracted hashes can be easily cracked using William Ghote gave a great First of all,'s script can be used to automatically download all users' password hashes, together with details about every single account (e.g. name, surname, e-mail address, etc.). By simply accessing theweb resource, the tool extracts the desired information disclosed by the hidden attribute named. The extracted hashes can be easily cracked using John The Ripper gave a great talk at BSides Las Vegas 2012 detailing the Lotus Notes password cracking process.





Alexandr Polyakov and Alexey Sintsov complete the picture providing even more details on how to pentest Lotus Domino deployments.



The links above are amazing resources that describe step by step how to easily hack into a mail infrastructure based on IBM solutions. As for my experience, a standard attack pattern to breach the Domino/iNotes infrastructure and access every company's e-mail accounts can be schematized as follow:



Finally, Penetration from application down to OS - Lotus Domino byand Lotus Domino: Penetration Through the Controller bycompleteproviding even more details on how to pentest Lotus Domino deployments.The links above are amazing resources that describe step by step how to easily hack into a mail infrastructure based on IBM solutions. As for my experience, a standardto breach the Domino/iNotes infrastructure and access every company's e-mail accounts can be schematized as follow:

Identify the location/path of the names.nsf web resource; Identify the user(s) with administrative privileges; Verify the user's password hash disclosure via the HTTPPassword hidden attribute; Get all the administrators' password hashes; Crack the so obtained hashes with John the Ripper; Log into the Domino Web Administrator application and have a drink.

The whole process took less than 30 hours and I can't hide that, at least for this time, this task was as easy as cut and paste of known attacks against an outdated environment. As my pentest objectives were quickly accomplished, I decided to turn my job into a security research session. Because of that, I dedicated the rest of the engagement to verifying the effectiveness of the aforementioned ACF mechanism.



Active Content Filtering (ACF) vulnerability details

The analysis of the filter started with injecting simple and well-known XSS attack vectors, in order to understand the underlying logic and spot potential defects. On the basis of my analysis - that must be considered an incomplete understanding of the filter's internals, based exclusively on black box observations - ACF tries to block malicious HTML tags by both commenting JavaScript code, specified by the <script> tag, and normalizing/filtering tag attributes that could lead to client-side code execution (e.g. by eliminating the onXYZ event handlers, such as onerror or onmouseover ). During the engagement, I found that the filtering feature is not properly implemented and allows an attacker to inject arbitrary attributes. In details, what I found is that the ACF is not able to correctly sanitize the sequence of characters src="< . For the sake of clarity, the following attack payload:



<img src= " < onerror=alert(1) src=x >

would be transformed in:



<img < onerror=alert(1) src=x >

resulting in the JavaScript alert method execution. Figure 1 shows how the above vector is incorrectly treated and used to set the BodyHtml variable - which contains the mail's HTML body message.



The whole process took less than 30 hours and I can't hide that, at least for this time, this task was as easy asof known attacks against an outdated environment. As my pentest objectives were quickly accomplished, I decided to turn my job into asession. Because of that, I dedicated the rest of the engagement to verifying the effectiveness of the aforementioned ACF mechanism.The analysis of the filter started with injecting simple and well-known XSS attack vectors, in order to understand the underlying logic and spot potential defects. On the basis of my analysis - that must be considered an incomplete understanding of the filter's internals, based exclusively on black box observations - ACF tries to block malicious HTML tags by both commenting JavaScript code, specified by thetag, and normalizing/filtering tag attributes that could lead to client-side code execution (e.g. by eliminating theevent handlers, such asor). During the engagement, I found that the filtering feature is not properly implemented and allows an attacker to inject arbitrary attributes. In details, what I found is that the ACF is not able to correctly sanitize the sequence of characters. For the sake of clarity, the following attack payload:would be transformed in:resulting in the JavaScript alert method execution. Figure 1 shows how the above vector is incorrectly treated and used to set thevariable - which contains the mail's HTML body message.

Figure 1 - Bypass of the ACF mechanism and injection of JavaScript code.

Conclusion

forwarding rule to the victim's iNotes application, thus effectively backdooring the victim's mailbox.



The following video demonstrates the execution of arbitrary JavaScript thanks to the described vulnerability. Moreover, it shows how the mail preview mechanism, if enabled, implies that the victim is not required to open the message in order to trigger the execution of JavaScript code - greatly reducing the required user iteration: The ACF bypass can be effectively abused to perform stored XSS attacks against iNotes users. In a real-world attack scenario, the bug could not only be exploited to perform Session Hijacking but also combined with Cross-Site Request Forgery (CSRF) to add a new e-mailsto the victim's iNotes application, thus effectivelythe victim's mailbox.