Security/Reviews/Gaia/wallpaper

From MozillaWiki
< Security‎ | Reviews‎ | Gaia
Jump to: navigation, search

App Review Details

Overview

The homescreen background image is configured via the wallpaper setting. It can be accessed via the "Display" menu in the settings. It allows you to change the image displayed as a wallpaper by browsing in a list of pictures (wallpaper library).

The Wallpaper app basically only register two activities: 'pick' and 'share'. The 'pick' Activity allows to select a picture 320*480 from the wallpaper library. It generates a list of pictures from which can be chosen one which will be the return value. It is used in the homescreen and the settings apps.

The list of available pictures is located at apps/wallpaper/resources/320x480/. But you can pick a picture from another source: the 'share' Activity allows an app to share an image (type image/*) to be used as wallpaper by setting 'wallpaper.image'. It is used in the gallery app for instance.

The wallpaper setting can be accessed from other apps, but it doesn't involved the activities defined in the Wallpaper app. For instance, apps/system/js/bootstrap.js defines the default background to use for all homescreens, or apps/communications/dialer/js/call_screen.js sets the caller contact image in place of the wallpaper.

Architecture

As described above.

Components

As described above.

Relevant Source Code

Source code can be found at https://github.com/mozilla-b2g/gaia/tree/master/apps/wallpaper

Application code:

  • pick.html - The UI for the 'pick' Activity
  • share.html - The UI for the 'share' Activity
  • js/pick.js - The code for handling the 'pick' Activity
  • js/share.js - The code for handling the 'share' Activity

Shared code:

  • shared/js/gesture_detector.js
  • shared/js/l10n.js

Permissions

The application has the following permissions:

  • "settings":{ "access": "readwrite" } - The 'share' activity sets the wallpaper setting.


Web Activity Handlers

The application makes the following activities available to other apps:

  • pick - To allow to select a picture from the wallpaper library located in resources/320x480/. It expects an image of 320x480 format.
 The return value is a list filetype/blob/filename for the selected item.
  • share - To set a picture as wallpaper from a third party app. It directly sets the wallpaper setting with the provided picture, so it doesn't return anything except the string "shared" if success.

Web Activity Usage

  • pick - Gets the wallpapers library resources by an XHR request to 'resources/320x480/list.json'.

Notable Event Handlers

Code Review Notes

1. XSS & HTML Injection attacks

It is possible to manually add a picture in apps/wallpaper/resources/320x480/ and add the filename in list.json. The content of list.json is used in pick.js to select a picture as a wallpaper, but it is not checked against bad input. Each filename is then used in a concatenation to build a CSS property via url(). This can possibly lead to code injection.


2. Secure Communications

No communication with any external services.


3. (Secure) data storage

Pictures are stored in wallpaper/resources or linked via the app sharing the picture (e.g.: gallery).


4. Denial of Service

As the app doesn't check for the size of the images it is provided with, a possible DOS attack could be to provide extreme large images.


5. Use of Privileged APIs

  • Settings: used to modify the wallpaper image setting.


6. Interfaces with other Apps/Content

Security Risks & Mitigating Controls

Actions & Recommendations

Regarding code injection, the following bug was filed:

  • bug 906065 Data from list.json in Wallpaper is untrusted