At the 2013 Tizen Developer Conference in San Francisco, there was
a range of different security talks examining difference facets of
hardening the mobile platform. Last week, we examined the Smack framework that implements
access control for system resources. There were also sessions that
explored the problem of protecting the device at higher levels of the
system stack. Sreenu Pilluta spoke about guarding against malware
delivered via the Internet, and Roger Wang offered an unusual
proposal for obfuscating JavaScript applications themselves: by
compiling them.
Content, secure
Pilluta is an engineer at anti-virus software vendor McAfee. As he
explained, Tizen device vendors are expected to manage their own "app
stores" through which users install safe applications, but that leaves
a lot of avenues for malicious content unblocked. Email, web
pages, and media delivery services can all download content from
untrusted sources that might contain a dangerous payload. Pilluta
described Tizen's Content Security Framework (CSF), a mechanism
designed to let device vendors add pluggable virus- and
malware-scanning software to their Tizen-based products.
The CSF itself provides a set of APIs that other components can use
to scan two distinct classes of content: downloaded data objects and remote
URLs. The actual engines that perform the scanning are plugins to
CSF, and are expected to be added to Tizen by device vendors.
Security engines come in two varieties: Scan Engines (for data) and
Site Engines (for URLs). Scan Engines inspect content and are
designed to retrieve malware-matching patterns from the vendor, as is
typical of PC virus-scanning programs today. Site Engines use a
reputation system, in which the vendor categorizes URLs and creates
block list policies by category (e.g., gambling, pornography, spyware,
etc.).
Applications dictate when the scanning is performed, Pilluta said,
which is intentionally a decision left up to the vendor. Some might
choose to scan a page before loading it at all, while others might
load the page but scan it before executing any JavaScript. It is also
up to the application what to do when infected content is found; the
rationale being that the application can provide a more context-aware
response to the user, and do so within the expected bounds of the user
interface, rather than popping up an imposing and unfamiliar warning
notification from a component the user was unaware even existed.
The CSF scanning APIs are high-level and event-driven, which
Pilluta said allowed applications to call them cooperatively. For
example, an email client could call the Site Engine to scan an URL
inside of an email message and the Scan Engine on a file attachment.
Similarly, the email client could call the Site Engine on a URL
clicked upon to be opened in the browser. Old-fashioned scanning
methods that use "deep hooks" into the filesystem would make this sort
of cooperation difficult, he said.
The APIs are also designed to provide flexibility to application
authors. For example, the Site Engine API is not tied to the Tizen
Web Runtime or even to the system's HTTP stack. Thus, an application
that uses its own built-in HTTP proxy can still take advantage of the
CSF to scan URLs without re-implementing the scanner.
Ultimately, CSF is a framework that device makers will take
advantage of, each in its own way. Presumably commercial vendors will
offer virus scanning engines to interested OEMs, but consumers will
likely not see any of them until a Tizen product hits the market. The
flexible framework also seems designed to support HTTP-driven services
like downloadable media and game content, which are frequently
the most-cited examples of why companies want to see Tizen in devices
like smart TVs and car dashboards.
CSF is an open source contribution to the Tizen platform, although
one would reasonably expect McAfee to also develop scanning engines to
offer to device vendors and mobile providers. As the CSF begins to
take shape in products coming to market, it will be interesting to see
if there are also any open source scanning engines, either in the
Tizen reference code or produced by third parties. One would hope so,
since malware detection is a concern for everyone, not just commercial
device makers.
JavaScript app protection
In contrast to Pilluta's talk, Wang was not presenting a component
of the Tizen architecture; rather, he was showing the progress he has
made on a personal effort that he hopes will appeal to independent
application developers. The issue he tackled was protecting
JavaScript applications against reverse-engineering. While that
is not an issue for developers of open source apps, building tools to
simplify the process on an open platform like Tizen could have
implications further down the road. Wang is a developer for Intel
working on the Tizen platform, although this particular project is a
personal side-effort.
In the past, he said, JavaScript was primarily used for incidental
page features and other such low-value scripts, but today JavaScript
applications implement major functionality, and HTML5-driven platforms
like Tizen should offer developers a way to protect their code against
theft and reverse-engineering. There are a number of techniques
already in use that side-step the issue, such as separating the core
functionality out into a server-side component, or building the
business model around the value of user-contributed data. But these
approaches do not work for "pure" client-side JavaScript apps.
Most app developers rely on an obfuscation system to "minify"
JavaScript that they want to obscure from prying eyes. Obfuscation
removes easily-understood function and variable names, and changes the
formatting to make the code delivered difficult to understand. The most
popular obfuscator, he noted, was Yahoo's YUI Compressor (which has other
beneficial features like removing dead code), followed by the Google
Closure Compiler, and UglifyJS. But obfuscators still produce
JavaScript which is delivered to the client browser or web runtime and
can ultimately be reverse-engineered.
The other major approach found in practice today is encryption, in
which the app is downloaded by the device and placed in encrypted
storage by the installer. Typically either the initial download is
conducted over a secure channel (e.g., HTTPS) or the download is done
in the clear and the installation program encrypts the app when it is
installed. Both have weaknesses, Wang said. Someone can dump the
HTTP connection if it is unencrypted and intercept the app, but a
skilled attacker could also run a man-in-the-middle attack against
HTTPS. Ultimately, he concluded, there is always dumping from memory,
so encryption is an approach that will always get broken one way
or another.
Although there are a few esoteric approaches out there—such
as writing one's app in another language and then compiling it
to JavaScript (a practice Wang said was out-of-scope for the
talk since he was addressing the concerns of JavaScript coders), most
people simply "lawyer up" and apply licensing terms that forbid
examining the app. That may not work in every jurisdiction, he said,
and even when it does, it is expensive.
Wang's experiment takes a different approach entirely: compiling
the JavaScript app to machine code, just like one does with a native
app. The technique works by exploiting the difference between a
platform's web runtime (which does not allow the user to inspect or
save HTML content) and the web browser. A developer can work in
JavaScript, then deploy the app as a binary. The platform would have
to support this approach, both in the installer and in the web
runtime, however, and developers would need to rebuild their apps for
each HTML5 platform.
Wang has implemented the technique as an experimental feature of node-webkit, his
app runtime derived from Chromium and Node.js. It compiles a
JavaScript app using the V8 JavaScript engine's "snapshot" feature.
Snapshots dump the engine's heap, and thus contain all of the created
objects and Just-In-Time (JIT) compiled functions. In Chromium, snapshots
are used to cache contexts for performance reasons; the node-webkit
compiler simply saves them. The resulting binaries can then be
executed by WebKit's JSC utility.
There are, naturally, limitations. V8 snapshots are created very
early in the execution process, so some DOM objects (such as
window) have not yet been created when the snapshot is
taken. On the wiki
entry for the feature, Wang suggests a few ways to work around
this issue. The other limitation, however, is that the snapshot tool
will throw an error if the JavaScript app is too large. Wang suggests
splitting the app up if this limitation poses a practical problem.
Another limitation is that the resulting binary also runs
significantly slower than JavaScript executed in the runtime.
He has been exploring other techniques for extending the idea, such
as using the Crankshaft
optimizer. Crankshaft is an alternative to the JavaScript compiler
currently used in V8. At the moment, using Crankshaft's compiler can
generate code that runs faster, Wang said, but it takes significantly
longer to compile, and it requires "training Crankshaft on your code."
Wang has defined an additional field for the package.json
file that defines Tizen HTML5 applications; "snapshot" :
"snapshot.bin" can be used to point to compiled JavaScript apps
and test them with node-webkit. He is still in the process of working
out the API required to connect JSC to the Tizen web runtime,
however. The feature is not currently slated to become part of the
official Tizen platform.
Obfuscating JavaScript by any means is a controversial subject. To
many in the free software world, it is seen as a technique to prevent
users from studying and modifying the software on their systems.
Bradley Kuhn of the Software Freedom Conservancy lambasted it at SCALE 2013, for instance.
Then again, obfuscation is not required to make a JavaScript app
non-free; as the Free Software Foundation notes,
licensing can do that alone. Still, it is likely that compiling
JavaScript apps to machine code offers a tantalizing measure of
protection to quite a few proprietary software vendors, beyond the
attack-resistance of traditional obfuscation techniques.
Many users, of course, are purely pragmatic about mobile apps: they
use what is available, free software or otherwise. But as the FSF
points out, unobfuscated JavaScript,
while it may be non-free, can still be read and modified. Perhaps the
longer-term concern about obfuscation or compiling to machine code is
that a device vendor could automate the technique on its mobile app
store. But automated or manual, the prospect of building JavaScript compilation into Tizen
did appear to ruffle several feathers at Tizen Dev Con; audience
members asked about the project during the Q&A sections of several
later talks. Nevertheless, for the foreseeable future, Wang's effort
remains a side project of an experimental nature.
[The author wishes to thank the Linux Foundation for travel assistance to Tizen Dev Con.]
Comments (3 posted)
Brief items
2. If I add a phone to my account, will those calls also be monitored?
Once again, the answer is good news. If you want to add a child or any other family member to your Verizon account, their phone calls—whom they called, when, and the duration of the call—will all be monitored by the United States government, at no additional cost.
— "
US
President Barack Obama" in a FAQ for Verizon customers
Knowing how the government spies on us is important. Not only because so
much of it is illegal -- or, to be as charitable as possible, based on
novel interpretations of the law -- but because we have a right to
know. Democracy requires an informed citizenry in order to function
properly, and
transparency
and accountability are essential parts of that. That means knowing what
our government is doing to us, in our name. That means knowing that the
government is operating within the constraints of the law. Otherwise, we're
living in a police state.
We need whistle-blowers.
—
Bruce
Schneier
Only one explanation seems logical. The government is afraid of us -- you and me. They're terrified (no pun intended) that if we even knew the most approximate ranges of how many requests they're making, we would suspect significant abuse of their investigatory powers.
In the absence of even this basic information, conspiracy theories have flourished, which incorrectly assume that the level of data being demanded from Web services is utterly unfettered and even higher than reality -- and the government's intransigence has diverted people's anger inappropriately to those Web services. A tidy state of affairs for the spooks and their political protectors.
—
Lauren Weinstein
Even assuming the U.S. government never abuses this data -- and there is no reason to assume that! -- why isn't the burgeoning trove more dangerous to keep than it is to foreswear? Can anyone persuasively argue that it's virtually impossible for a foreign power to
ever gain access to it? Can anyone persuasively argue that if they did gain access to years of private phone records, email, private files, and other data on millions of Americans, it wouldn't be hugely damaging?
Think of all the things the ruling class never thought we'd find out about the War on Terrorism that we now know. Why isn't the creation of this data trove just the latest shortsighted action by national security officials who constantly overestimate how much of what they do can be kept secret? Suggested rule of thumb: Don't create a dataset of choice that you can't bear to have breached.
—
Conor Friedersdorf
Comments (15 posted)
New vulnerabilities
bzr: denial of service
| Package(s): | bzr |
CVE #(s): | CVE-2013-2099
CVE-2013-2098
|
| Created: | June 7, 2013 |
Updated: | September 10, 2013 |
| Description: |
From the Red Hat bug report:
A denial of service flaw was found in the way SSL module implementation of Python3, version 3 of the Python programming language (aka Python 3000), performed matching of the certificate's name in the case it contained many '*' wildcard characters. A remote attacker, able to obtain valid certificate with its name containing a lot of '*' wildcard characters could use this flaw to cause denial of service (excessive CPU consumption) by issuing request to validate such a certificate for / to an application using the Python's ssl.match_hostname() functionality. |
| Alerts: |
|
Comments (2 posted)
cgit: directory traversal
| Package(s): | cgit |
CVE #(s): | CVE-2013-2117
|
| Created: | June 6, 2013 |
Updated: | July 17, 2013 |
| Description: |
From the Red Hat Bugzilla entry:
Today I found a nasty directory traversal:
http://somehost/?url=/somerepo/about/../../../../etc/passwd
[...] Cgit by default is not vulnerable to this, and the vulnerability only
exists when a user has configured cgit to use a readme file from a
filesystem filepath instead of from the git repo itself. Until a
release is made, administrators are urged to disable reading the
readme file from a filepath, if currently enabled. |
| Alerts: |
|
Comments (none posted)
chromium-browser: multiple vulnerabilities
| Package(s): | chromium-browser |
CVE #(s): | CVE-2013-2855
CVE-2013-2856
CVE-2013-2857
CVE-2013-2858
CVE-2013-2859
CVE-2013-2860
CVE-2013-2861
CVE-2013-2862
CVE-2013-2863
CVE-2013-2865
|
| Created: | June 11, 2013 |
Updated: | June 12, 2013 |
| Description: |
From the Debian advisory:
CVE-2013-2855:
The Developer Tools API in Chromium before 27.0.1453.110 allows
remote attackers to cause a denial of service (memory corruption) or
possibly have unspecified other impact via unknown vectors.
CVE-2013-2856:
Use-after-free vulnerability in Chromium before 27.0.1453.110
allows remote attackers to cause a denial of service or possibly
have unspecified other impact via vectors related to the handling of
input.
CVE-2013-2857:
Use-after-free vulnerability in Chromium before 27.0.1453.110
allows remote attackers to cause a denial of service or possibly
have unspecified other impact via vectors related to the handling of
images.
CVE-2013-2858:
Use-after-free vulnerability in the HTML5 Audio implementation in
Chromium before 27.0.1453.110 allows remote attackers to cause
a denial of service or possibly have unspecified other impact via
unknown vectors.
CVE-2013-2859:
Chromium before 27.0.1453.110 allows remote attackers to bypass
the Same Origin Policy and trigger namespace pollution via
unspecified vectors.
CVE-2013-2860:
Use-after-free vulnerability in Chromium before 27.0.1453.110
allows remote attackers to cause a denial of service or possibly
have unspecified other impact via vectors involving access to a
database API by a worker process.
CVE-2013-2861:
Use-after-free vulnerability in the SVG implementation in Chromium
before 27.0.1453.110 allows remote attackers to cause a
denial of service or possibly have unspecified other impact via
unknown vectors.
CVE-2013-2862:
Skia, as used in Chromium before 27.0.1453.110, does not
properly handle GPU acceleration, which allows remote attackers to
cause a denial of service (memory corruption) or possibly have
unspecified other impact via unknown vectors.
CVE-2013-2863:
Chromium before 27.0.1453.110 does not properly handle SSL
sockets, which allows remote attackers to execute arbitrary code or
cause a denial of service (memory corruption) via unspecified
vectors.
CVE-2013-2865:
Multiple unspecified vulnerabilities in Chromium before
27.0.1453.110 allow attackers to cause a denial of service or
possibly have other impact via unknown vectors. |
| Alerts: |
|
Comments (none posted)
kde: weak passwords generated by PasteMacroExpander
| Package(s): | kde |
CVE #(s): | CVE-2013-2120
|
| Created: | June 12, 2013 |
Updated: | June 17, 2013 |
| Description: |
From the Red Hat bugzilla:
A security flaw was found in the way PasteMacroExpander of paste applet of kdeplasma-addons, a suite of additional plasmoids for KDE desktop environment, performed password generation / derivation for user provided string. An attacker could use this flaw to obtain plaintext form of such a password (possibly leading to their subsequent ability for unauthorized access to a service / resource, intended to be protected by such a password). |
| Alerts: |
|
Comments (6 posted)
kernel: multiple vulnerabilities
| Package(s): | kernel |
CVE #(s): | CVE-2013-1935
CVE-2013-1943
CVE-2013-2017
|
| Created: | June 11, 2013 |
Updated: | June 13, 2013 |
| Description: |
From the Red Hat advisory:
* A flaw was found in the way KVM (Kernel-based Virtual Machine)
initialized a guest's registered pv_eoi (paravirtualized end-of-interrupt)
indication flag when entering the guest. An unprivileged guest user could
potentially use this flaw to crash the host. (CVE-2013-1935, Important)
* A missing sanity check was found in the kvm_set_memory_region() function
in KVM, allowing a user-space process to register memory regions pointing
to the kernel address space. A local, unprivileged user could use this flaw
to escalate their privileges. (CVE-2013-1943, Important)
* A double free flaw was found in the Linux kernel's Virtual Ethernet
Tunnel driver (veth). A remote attacker could possibly use this flaw to
crash a target system. (CVE-2013-2017, Moderate)
Red Hat would like to thank IBM for reporting the CVE-2013-1935 issue and
Atzm WATANABE of Stratosphere Inc. for reporting the CVE-2013-2017 issue.
The CVE-2013-1943 issue was discovered by Michael S. Tsirkin of Red Hat. |
| Alerts: |
|
Comments (none posted)
libraw: code execution
| Package(s): | libraw |
CVE #(s): | CVE-2013-2126
|
| Created: | June 7, 2013 |
Updated: | July 31, 2013 |
| Description: |
From the Secunia advisory:
Two vulnerabilities have been reported in LibRaw, which can be exploited by malicious people to potentially compromise an application using the library.
1) A double-free error exits when handling damaged full-color within Foveon and sRAW files.
2) An error during exposure correction can be exploited to cause a buffer overflow.
Successful exploitation may allow execution of arbitrary code. |
| Alerts: |
|
Comments (none posted)
mediawiki: insecure file uploading
| Package(s): | mediawiki |
CVE #(s): | CVE-2013-2114
|
| Created: | June 7, 2013 |
Updated: | July 22, 2013 |
| Description: |
From the Red Hat bug report:
MediaWiki user Marco discovered that security checks for file uploads were not being run when the file was uploaded in chunks through the API. This option has been available to users who can upload files since MediaWiki 1.19. |
| Alerts: |
|
Comments (none posted)
mod_security: denial of service
| Package(s): | mod_security |
CVE #(s): | CVE-2013-2765
|
| Created: | June 6, 2013 |
Updated: | July 2, 2013 |
| Description: |
From the Red Hat Bugzilla entry:
Fixed Remote Null Pointer DeReference (CVE-2013-2765). When forceRequestBodyVariable action is triggered and a unknown Content-Type is used,
mod_security will crash trying to manipulate msr->msc_reqbody_chunks->elts however msr->msc_reqbody_chunks is NULL. (Thanks Younes JAAIDI) |
| Alerts: |
|
Comments (none posted)
PackageKit: only allow patches for regular updates
| Package(s): | PackageKit |
CVE #(s): | CVE-2013-1764
|
| Created: | June 10, 2013 |
Updated: | June 12, 2013 |
| Description: |
From the openSUSE advisory:
The PackageKit zypp backend was fixed to only allow patches
to be updated. Otherwise a regular user could install new
packages or even downgrade older packages to ones with
security problems. |
| Alerts: |
|
Comments (none posted)
php: code execution
| Package(s): | php |
CVE #(s): | CVE-2013-2110
|
| Created: | June 11, 2013 |
Updated: | June 24, 2013 |
| Description: |
From the Slackware advisory:
A heap-based overflow in the quoted_printable_encode() function could be used by a remote attacker to crash PHP or execute code as the 'apache' user. |
| Alerts: |
|
Comments (none posted)
pki-tps: two vulnerabilities
| Package(s): | pki-tps |
CVE #(s): | CVE-2013-1885
CVE-2013-1886
|
| Created: | June 6, 2013 |
Updated: | June 12, 2013 |
| Description: |
From the Red Hat bugzilla entries [1, 2]:
CVE-2013-1885: It was reported that Certificate System suffers from XSS flaws in the /tus/ and /tus/tus/ URLs, such as:
GET /tus/tus/%22%2b%61%6c%65%72%74%28%34%38%32%36%37%29%2b%22
or
GET /tus/%22%2b%61%6c%65%72%74%28%36%31%34%35%32%29%2b%22
which will in turn output something like:
<!--
var uriBase = "/tus/"+alert(85384)+";
var userid = "admin";
This was reported against Certificate System 8.1 and may also affect Dogtag 9 and 10.
CVE-2013-1886: It was reported that Certificate System suffers from a format string injection flaw when viewing certificates. This could allow a remote attacker to crash the Certificate System server or, possibly, execute arbitrary code with the privileges of the user [running] the service (typically run as an unprivileged user, such as pkiuser). |
| Alerts: |
|
Comments (none posted)
pymongo: denial of service
| Package(s): | pymongo |
CVE #(s): | CVE-2013-2132
|
| Created: | June 11, 2013 |
Updated: | July 8, 2013 |
| Description: |
From the Debian advisory:
Jibbers McGee discovered that pymongo, a high-performance schema-free
document-oriented data store, is prone to a denial-of-service
vulnerability.
An attacker can remotely trigger a NULL pointer dereference causing MongoDB
to crash. |
| Alerts: |
|
Comments (none posted)
rubygem-passenger: insecure temp files
| Package(s): | rubygem-passenger |
CVE #(s): | CVE-2013-2119
|
| Created: | June 11, 2013 |
Updated: | July 10, 2013 |
| Description: |
From the Red Hat bugzilla:
Michael Scherer reported that the passenger ruby gem, when used in standalone mode, does not use temporary files in a secure manner. In the lib/phusion_passenger/standalone/main.rb's create_nginx_controller function, passenger creates an nginx configuration file insecurely and starts nginx with that configuration file:
@temp_dir = "/tmp/passenger-standalone.#{$$}"
@config_filename = "#{@temp_dir}/config"
If a local attacker were able to create a temporary directory that passenger uses and supply a custom nginx configuration file they could start an nginx instance with their own configuration file. This could result in a denial of service condition for a legitimate service or, if passenger were executed as root (in order to have nginx listen on port 80, for instance), this could lead to a local root compromise. |
| Alerts: |
|
Comments (none posted)
samba: multiple vulnerabilities
| Package(s): | samba |
CVE #(s): | |
| Created: | June 10, 2013 |
Updated: | June 12, 2013 |
| Description: |
From the openSUSE advisory:
- - Add support for PFC_FLAG_OBJECT_UUID when parsing
packets; (bso#9382).
- - Fix "guest ok", "force user" and "force group" for guest
users; (bso#9746).
- - Fix 'map untrusted to domain' with NTLMv2;(bso#9817).
- - Fix crash bug in Winbind; (bso#9854).
- - Fix panic in nt_printer_publish_ads; (bso#9830).
|
| Alerts: |
|
Comments (none posted)
subversion: denial of service
| Package(s): | subversion |
CVE #(s): | CVE-2013-1968
CVE-2013-2112
|
| Created: | June 10, 2013 |
Updated: | June 28, 2013 |
| Description: |
From the Debian advisory:
CVE-2013-1968:
Subversion repositories with the FSFS repository data store format
can be corrupted by newline characters in filenames. A remote
attacker with a malicious client could use this flaw to disrupt the
service for other users using that repository.
CVE-2013-2112:
Subversion's svnserve server process may exit when an incoming TCP
connection is closed early in the connection process. A remote
attacker can cause svnserve to exit and thus deny service to users
of the server. |
| Alerts: |
|
Comments (none posted)
wireshark: denial of service
| Package(s): | wireshark |
CVE #(s): | CVE-2013-3561
|
| Created: | June 7, 2013 |
Updated: | June 12, 2013 |
| Description: |
From the CVE database entry:
Multiple integer overflows in Wireshark 1.8.x before 1.8.7 allow remote attackers to cause a denial of service (loop or application crash) via a malformed packet, related to a crash of the Websocket dissector, an infinite loop in the MySQL dissector, and a large loop in the ETCH dissector. |
| Alerts: |
|
Comments (none posted)
wireshark: multiple vulnerabilities
| Package(s): | wireshark |
CVE #(s): | CVE-2013-4074
CVE-2013-4081
CVE-2013-4083
|
| Created: | June 12, 2013 |
Updated: | September 30, 2013 |
| Description: |
From the CVE entries:
The dissect_capwap_data function in epan/dissectors/packet-capwap.c in the CAPWAP dissector in Wireshark 1.6.x before 1.6.16 and 1.8.x before 1.8.8 incorrectly uses a -1 data value to represent an error condition, which allows remote attackers to cause a denial of service (application crash) via a crafted packet. (CVE-2013-4074)
The http_payload_subdissector function in epan/dissectors/packet-http.c in the HTTP dissector in Wireshark 1.6.x before 1.6.16 and 1.8.x before 1.8.8 does not properly determine when to use a recursive approach, which allows remote attackers to cause a denial of service (stack consumption) via a crafted packet. (CVE-2013-4081)
The dissect_pft function in epan/dissectors/packet-dcp-etsi.c in the DCP ETSI dissector in Wireshark 1.6.x before 1.6.16, 1.8.x before 1.8.8, and 1.10.0 does not validate a certain fragment length value, which allows remote attackers to cause a denial of service (application crash) via a crafted packet. (CVE-2013-4083) |
| Alerts: |
|
Comments (none posted)
Page editor: Jake Edge
Next page: Kernel development>>