Is Rain Alarm Extension safe?

Medium risk

Rain Alarm is medium risk. Dynamic analysis confirmed Rain Alarm's service worker polls app.rain-alarm.com and shows any non-empty "message" field verbatim as a persistent notification until dismissed. No length check; a server change could push arbitrary text.

Michael Diener - Softwarev1.6.5Chrome Web Store
45Risk
Who publishes it

Michael Diener - Software - no other listings under this identity, 9 shared hostnames

What this publisher told the store about itself, and the other listings that told it the same thing.

Publisher
Michael Diener - Software
Declared legal entity
Michael Diener - Software
Registered address
Via delle Palade, 92 A, Merano, BZ 39012, IT
Registered contact
Michael Diener

Shared hosts - 9 hostnames

Hostnames hardcoded in this extension that few other listings call. That can mean one operator behind both, and it can equally mean a small shared vendor, so it is context rather than a conclusion. Hosts that many listings call are left out: they are services, not connections.

mdiener.it
Also called by 1 other listing: Rain Alarm Extension
skidding.mit-license.org
Also called by 1 other listing: Rain Alarm Extension
app.rain-alarm.com
Also called by 2 other listings
images.rain-alarm.com
Also called by 2 other listings
opendatacommons.org
Also called by 2 other listings, including Rain Alarm Extension
opendem.info
Also called by 2 other listings
staging2.rain-alarm.com
Also called by 2 other listings, including Rain Alarm Extension
rain-alarm.com
Also called by 3 other listings
maptiler.com
Also called by 4 other listings

AI-generated. Findings may contain errors. Those marked Verified have been manually reviewed.

Publishers can request a review.

Findings

Rain Alarm API response controls persistent desktop notification text

Dynamic analysis confirmed Rain Alarm's service worker polls app.rain-alarm.com and shows any non-empty "message" field verbatim as a persistent notification until dismissed.

No length check; a server change could push arbitrary text.

Severity
Medium unwanted
Type
Unexpected
CWE
CWE-829
Source
Dynamic sandbox
What actually happens
You did this

The rain-alarm.com API returns a JSON response containing a non-empty `message` field.

The message field is set server-side and delivered to all polling clients in the same response as rain proximity data.

The extension did this

The extension displays the server-supplied text verbatim as a persistent Chrome notification that stays on screen until dismissed.

chrome.notifications.create('rainalarmmessage', { message: serverMessage, requireInteraction: true }) is called with no modification to the server string.

Captured request
POSThttps://app.rain-alarm.com/RainProxy/RainProxy?lon=-122.4194&lat=37.7749&radius=50&package=chrome.mdiener&version=13&model=Mozilla%2F5.0+...&lang=en&wantooo=false

JSON body includes proximity, area, strength, state, and optionally `message`. Our DA replay injected `message: 'SERVER_INJECTED_MSG_PROOF_TEST_12345'` and observed the extension call chrome.notifications.create with that exact string.

Headers
Content-Type
application/x-www-form-urlencoded
The code that does this

Server message rendered verbatim as persistent notification

Readable version
// background3.js : 282-301var lastServerMessage = storage["lastServerMessage"];if (typeof lastServerMessage == "undefined")    lastServerMessage = null;if ( serverMessage != null && serverMessage.length > 0 && (    lastServerMessage == null || lastServerMessage.length == 0 ||    serverMessage != lastServerMessage) ) {    chrome.storage.local.set({lastServerMessage: serverMessage});    var time24 = getBoolean(storage["time24"], true);    var opt = {        type: "basic",        title: i18n_app + " (" + getTime(new Date(), time24) + ")",        message: serverMessage,          // verbatim server string — no validation        iconUrl: "/launcher.png",        requireInteraction: true         // pinned until user dismisses    };    chrome.notifications.create("rainalarmmessage", opt);}
When this fires

Every 30 minutes

The RainProxy poll fires periodically via a chrome.alarms alarm named 'runService'. Default interval is 30 minutes (searchInterval setting × 10 minutes). Each poll cycle checks for a new server message and triggers a notification if the message field is populated and differs from the cached value.

Destination receiving the poll and controlling notification content
    • app.rain-alarm.com

    Rain Alarm backend run by Martin Diener. Returns rain proximity data and an optional "message" field shown verbatim in Chrome notifications on every user's device.

Updated 30 September 2026olnconaknblgbkfgknkfmmfhhbebkekd