It's just a very first look to AIR (Adobes Integrated Runtime) and
its possibilities to process HTML/JS. AIR is beta by now, so Adobe
may change things in the final release.
## What is AIR?
Quote from Adobe: "Adobe Integrated Runtime (AIR) is a cross-
operating system runtime that allows you to leverage your existing
and deploy Rich Internet Applications (RIAs) to the desktop."
## Some security related informations on AIR:
- The installer throws a warning about it's ability for unrestricted
system access (so it's not a real surprise what AIR apps are capable of)
- AIR uses WebKit as renderer on both supported platforms, Windows
remote services, file SQL queries and open sockets
- SWF files in the AIR application sandbox can cross-script any SWF
file from any domain
- Remote SWF files can only read files inside the security sandbox
versa I guess)
## File access
In general every file on local file system can be accessed by AIR
apps. This includes reading, writing, appending or deletion as well
as testing for file and directory existence. Another interesting
feature is the possibility to overwrite calling files inside compiled
AIR application during runtime.
## Example (only tested on OSX so far)
For this to work in a real world scenario a service used by an AIR
app must be vulnerable to a persistant XSS (or another typical
vulnerability), and the app needs to call data in a way that payloads
gets rendered and executed.
This basic example consists of 4 files:
- AIR application descriptor file: App.xml
- Calling HTML file inside the AIR app package: caller.html
- A file which just contains aliases for AIR runtime: AIRAliases.js
(part of AIR SDK)
<?xml version="1.0" encoding="UTF-8"?>
<rootContent systemChrome="standard" visible="true">caller.html</
# For lazyness reasons the JS is included straight away
# But it also works if exploited and included during runtime
var localFile = air.File.documentsDirectory;
localFile = localFile.resolve("/local/path/to/aip/resources/
// i.e. on MacOS: /Applications/AIR-overwrite.air/Contents/
var localFileStream = new air.FileStream();
localFileStream.writeUTFBytes("data from remote");
To compile, the AIR SDK must be installed (beside the actual
runtime). The bin of the SDK dir contains ADT, a command-line tool to
generate AIR files:
$ adt -package AIR-overwrite.air App.xml AIRAliases.js caller.html
After installing and running AIR-overwrite.app, "data from remote" is
appended to caller.html. Another interesting point for overwriting
inside AIR apps could be META-INF/application.xml which contains the
pointers to the resources or certificates.
The example is kinda lame, I know. With such remote access much
fancier stuff is imaginable. But what I found somehow funny is the
fact that AIR doesn't have any mechanism to recognize changes to its
Macromedia/Adobe Flash has a long history of bad or no security, so
AIR seems to stay in that long tradition. By introducing those PNDF
("Potentially Dangerous Native Functions" - thanks to Wisec for
making up this term :) Adobe opens new vectors XSS can cause. Stuff
like SameOrigin policies and access restrictions are there for a very
good and known reason. Adobe seem to know about the security
implications as they describe in their developer docs, but
nonetheless it doesn't makes it any better from my point of view.
There are already some real world services/sites offering AIR where
exploitation works the way described.
- AIR installer
- AIR SDK