Joomla-Security-Alerts per E-Mail mit Feedrabbit und Apify

von

Um in Sachen Joomla-Security auf dem neuesten Stand zu bleiben, lohnt es sich, neben regelmäßiger Lektüre zum Thema auch schnell auf bekannt werdende Sicherheitslücken zu reagieren. Und um reagieren zu können, muß die verantwortungsvolle Joomla-Administratorin ja erstmal davon wissen.

Als Mensch, der außer Joomla-Maintenance noch viele andere schöne Hobbies hat, wollte ich diesen Schritt mal automatisieren. Ziel war, bei Bekanntwerden von Sicherheitslücken per E-Mail informiert zu werden.

Gute Quellen für Infos

Bei meiner Suche nach guten Quellen stieß ich auf mehrere Seiten mit unterschiedlicher Aktualität. Allen voran die Joomla! Developer Network™ Security Announcements – hier werden vor allem behobene Security Issues veröffentlicht, und der Fokus liegt hier auch auf dem Joomla Core.

Umfangreicher und der De-Facto-Standard in Sachen CVE ist die Seite cvedetails.com. Obwohl die Joomla-Listings hier nicht unbedingt aktueller sind als die aus dem JDN, habe ich sie sicherheitshalber mal mit ins Auge gefasst.

Zu guter Letzt gibt es im JDN noch die sehr detaillierten Ressourcen https://vel.joomla.org/live-vel (ungefixte Vulnerabilities) und https://vel.joomla.org/resolved (gefixte Vulnerabilities). Im Gegensatz zu den anderen Quellen gibt es für diese beiden keinen RSS-Feed, aber dazu später mehr.

RSS to E-Mail

Wie kommt nun der RSS-Inhalt als Mail zu mir? There is a service for that, oder besser, hunderte Services. Ich fand Feedrabbit in Sachen Übersichtlichkeit und Pricing optimal (bis 1o Subscriptions kostenlos). Hier konnte ich nun einfach die RSS-Feeds der jeweiligen Quellen abonnieren:

Bei https://vel.joomla.org/ sah es schon schwieriger aus, da dort kein RSS-Feed existiert. Hier kommt aber ein Service zu Hilfe, der Apify heißt und Web-Scraping als Business-Modell hat. Auch hier findet sich ein kostenfreier Developer-Account, also kommen für die hier beschriebenen Anforderungen keine Kosten auf uns zu.

Web-Scraper to RSS

Bei Apify einen Account einrichten ging ganz schnell. Mir half beim Einrichten des Feed eine gute, aber etwas veraltete Beschreibung aus dem Apify-Blog.

Task einrichten

Über „Tasks > Create a new Task“ und dann „Web-Scraper“ legen wir eine neue Scraping-Task an. Als „Start-URL“ wird https://vel.joomla.org/resolved (bzw https://vel.joomla.org/live-vel) eingetragen, wir brauchen weder Request-Queue noch Link-Selector oder Pseudo-URLS (da wir ja nur eine Seite scrapen möchten).

Die PageFunction (also die Funktion, die auf der gescrapeten Seite nun die Inhalte extrahieren soll) ist in JavaScript geschrieben, weil das Ganze mit Node läuft. Für bequemes DOM-Handling können wir auf jQuery zurückgreifen – wer sagt, daß jQuery tot ist?

async function pageFunction(context) {
    const $ = context.jQuery;
    const f = $('#adminForm')
    const rows = f.find('tr[class^="cat-list-row"')
    let result = []

    for (let i = 0; i < rows.length; i ++) {
        const linkElement = $(rows[i]).find('td.list-title a')
        const title = linkElement.text().trim()
        const link = linkElement.attr('href')
        const date = new Date($(rows[i]).find('td.list-date').text())

        result.push({
            title       : title,
            description : title,
            link        : `https://vel.joomla.org${link}`,
            guid        : date.getTime(),
            pubDate     : date.toUTCString()
        });
    }

    // Only for debugging
    context.log.info(JSON.stringify(result));

    return result
}

Die restlichen Settings passen soweit. Nun können wir den Actor mit „Save and run“ ausprobieren und im Log schauen, ob die Inhalte wie gewünscht ausgegeben werden.

Schedule einrichten

Anders als im verlinkten Tutorial (immerhin 4 Jahre alt) ist es nun wesentlich einfacher, den Task automatisiert anzustoßen. Oben rechts in der Apify-UI findet sich ein Actions-Dropdown, hier wählen wir „Schedule“ und vergeben für den neuen Plan einen Namen wie „JVel-Resolved-Fetcher-schedule“. Es sollte reichen, diesen auf „@daily“ zu setzen.

Nun müssen wir nur noch die URL des RSS-Feed des Scraping-Result finden. Hierfür nochmal zu „Tasks > <Name der Task>“ gehen und im Tab „Runs“ den letzten erfolgreich durchgelaufenen Run anklicken. In der sich öffnenden Detailansicht finden wir im Tab „Dataset“ ziemlich weit unten in der „Format“-Tabelle die RSS-Url zu den sogenannten „Clean Items“ („View“).

Zu guter Letzt kann ich die beiden so generierten RSS-Feeds via Feedrabbit abonnieren und bin nun hoffentlich immer auf dem neuesten Stand, was bekanntwerdende Sicherheitslücken in Joomla und dessen Komponenten angeht.

Kommentieren