The next frontier of corporate development may well be Rich Internet Applications. RIAs are
Internet applications which do not necessarily run in the browser and are free
of user-interface limitations of that environment. Corporate development went
head first into conventional Internet application development before the
enormous security implications of that platform were clear. What about RIAs? Is
the security picture any better for these platforms?
There are quite a few RIA platforms, but only three of any
fame: Adobe's AIR, Microsoft's Silverlight and Oracle's
JavaFX. You could make the case that Adobe Flash and Oracle's Java more
generally are RIA platforms, but these three are the products marketed for
standalone RIA development. AIR is based on the Flash platform and open-source
Webkit browser, Silverlight on the .NET framework and JavaFX on Java.
AIR and JavaFX
are just a few years old. You can make the case that Java has provided RIAs
since 1994. The main innovation in JavaFX is a simpler scripting language.
Out-of-browser apps are new to Silverlight 4. Each brings with it many, if not
all, security issues of their base platforms.
After examining the products and documentation, it's clear that
Adobe has put the most work into security and the documentation of secure
practices for administrators and developers. This may be counter-intuitive, as
their reputation for security is not a good one lately, and their products are
the most-common target out there for attack. But Adobe has adopted several
measures in the last year or two to improve the security of their products
(most prominently Reader) and these have made a difference. If you are careful
and conscientious about your AIR/Flash and
application deployments, then you can feel secure about them.
The first thing you need to be concerned about is the security
record of the platform.
Flash's record for security vulnerabilities for the last few years
is not a happy one. Scores of vulnerabilities have been found and, generally,
fixed. Exploit code for Flash vulnerabilities is not hard to find, and its
popularity is not hard to explain: Flash can be found on a very high percentage
of desktop computers, probably higher than that of Windows. It doesn't get as
much attention, but Webkit also has a rich record in recent years of platform
vulnerabilities, and some of these may be exploitable through your application.
Java's vulnerability record is also less than stellar; because of
a high desktop installation rate, it's an up-and-comer in the exploit
world, such as this recent
example. JavaFX actually has not a single reported vulnerability, but
this doesn't likely mean much, since JavaFX apps can call into Java and avail
themselves of Java problems.
Silverlight's record in this regard may be the best of the three.
There have been only three reported vulnerabilities in Silverlight, two of them just
recently. The total number of reported .NET framework
vulnerabilities over the years that could affect Silverlight is hard to number,
but it's probably no more than 12 (including the three Silverlight
vulnerabilities).
In all three cases, the RIA platform has few reported
vulnerabilities, none in JavaFX's case. But vulnerabilities in the base
platforms—Flash, .NET and
Java—can be exploited through vulnerabilities in your own apps. Even if we can
be optimistic about the platform vulnerability records going forward, the real
issue in the future may be cross-site scripting, cross-site request forgery and
the other sorts of flaws that are extremely common among conventional Web apps.
None of the platforms or development tools provides any special help to avoid
these errors.
All three of these platforms also share the problem of a
proliferation of old, unpatched versions, and the surest way to keep your
security tight is to keep your clients updated. Microsoft and Adobe help users
with this more than Oracle.
Adobe provides procedures and tools for
automating and managing updates through standard group policy
mechanisms. Silverlight, in addition to having its own update mechanism, can be
updated through WSUS (Windows Server Update Services). Java has an auto-update
mechanism and can be installed
silently, but Oracle provides no MSI version,
making management more difficult. If you have a full-blown patch management
system, then all products should be easier to manage.
There are other management issues besides updates, but you don't
get a lot of options for them. With Silverlight you can
use group policies to control whether clients can play DRM (digital-rights-management)
content; set the Silverlight auto-update mechanism to full auto, prompt or no
updates; whether to allow Silverlight access to the webcam and microphone;
enable or disable use of UDP (user datagram protocol) multicast; and, most
importantly, enable or disable the installation of trusted applications.
Trusted applications can access local system resources such as the file system.
More details can be found in the Silverlight Deployment
Guide (Word Document).
The Adobe Flash Player
Administration Guide for Flash Player 10.1 is a gold mine of
information on controlling installation (including SMS configuration), file
formats and network protocols used by the product. By putting a mms.cfg file on
client systems you can centrally manage security and other configuration options
on them, including a whitelist of domains and IP addresses which Flash/AIR may
communicate, and not with any other.
AIR-specific
security information is also plentiful, starting with AIR Security Overview and AIR Administrator's
Guide. Somewhat surprisingly, all AIR apps have to be
code-signed, although a self-signed certificate may be used. This gives
administrators the ability to block untrusted code. AIR apps run in sandboxes
similar to Flash sandboxes.
Java can be managed with some third-party products, but out-of-the-box
management is meager. There is a rich JMX (Java Management eXtensions) API if you want
to build your own.
All three platforms default to running programs in a limited
sandbox mode but also allow programs to elevate permissions in order to access
the file system and other resources. Flash applications can be configured to
trust a variety of scopes of content, from specific files or directories all
the way up to complete trust. This is a loaded gun, of course, but sometimes
you need to trust applications. Trusted apps in Silverlight can also access the
local file system and interoperate through COM with native code libraries. This
allows you to leverage existing back-end software while using Silverlight as a
front-end experience. Trusted JavaFX apps, like all Java apps, have to be
digitally signed. If you don't sign the app, then the user will be bombarded
with security questions, whereas if it is signed they simply have to say once
that they trust the program's publisher.
It's clear that all three platforms have strengths, but from a
security standpoint, the picture is strange. Silverlight definitely looks
strongest based on real-world experience, but that may just demonstrate a lack
of interest due to a lack of market share. JavaFX is not a high-profile system
and who knows where it stands now that Oracle controls it, but Java's security
record is a mixed bag. Once the thought—or rather, the marketing—was that Java
apps were inherently secure, but clearly this is not true and clearly Java VM
and Java apps have security problems. Not long ago, Adobe was every security
analyst's favorite whipping boy, but Adobe has turned that around and provided
customers with the means to secure their Flash and AIR
implementations. Adobe's products may or may not be the most secure, but they
have put the most work into security.