postmessage security in chrome extensions · 2020. 1. 17. · postmessagein chrome extensions...

37
PostMessage Security in Chrome Extensions Arseny Reutov [email protected] https://raz0r.name OWASP London Chapter

Upload: others

Post on 03-Jan-2021

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

PostMessage Security in Chrome ExtensionsArseny [email protected]://raz0r.name

OWASP London Chapter

Page 2: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

$whoami

• WebapplicationsecurityresearcheratPositiveTechnologies

• MemberofPositiveHackDays(https://phdays.com)conferenceboard

• Occasionalwebsecurityblogger(https://raz0r.name)

Page 3: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Agenda

• Chromeextensions&theirmessaging• PostMessage securityconsiderations• Mountingextensionsanalysis• Theresults!• Thetakeaways

Page 4: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

CHROMEEXTENSIONS&THEIRMESSAGING

PartI

Page 5: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Chromeextensionsecosystem

• ChromeWebStoreisnotoriouslyknownintermsofsecurity(unintuitivepermissionsdialogs,malware&insecureextensions)

Page 6: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Chromeextensionsmessaging

Page 7: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Extensionmanifestfile{

"name": “My Extension",

"description": “My Super Chrome Extension",

"version": “1.0",

"background": {

"scripts": [“js/background.js"]

},

"content_scripts": [

{

"matches": ["<all_urls>"],

"js": ["js/jquery.js", "js/content.js"]

}

],

"permissions": ["tabs", "http://*/*", "https://*/*"]

}

Page 8: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

POSTMESSAGE SECURITYCONSIDERATIONS

PartII

Page 9: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

PostMessage API

window.postMessage()methodenablescross-origincommunication

someWindow.postMessage(

"my message", // message data

"*", // target origin

);

Page 10: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

PostMessage API

Developerisinchargeoforiginvalidation

window.addEventListener("message", receiveMessage, false);

function receiveMessage(event) {if (event.origin !== "http://example.org")

return; // checking origin hostif (event.source !== window)

return; // or origin windowprocess(event.data);

}

Page 11: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

PostMessage API

• Iforiginvalidationisabsentorisflawed,anattacker’smessagedatacanreachdangerouspiecesofcode.

• See“ThepitfallsofpostMessage”byMathiasKarlsson forcommonoriginvalidationbypasses.

Page 12: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

PostMessage API

• UnlikeotherDOMevents,messagepropagationtolistenerscannotbestoppedviareturn false or stopPropagation().

• Extensions’messagelistenersarenotlistedinChromeDeveloperTools.

Page 13: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

PostMessage AttackVectors

Method1:iframes

var iframe = document.createElement("iframe");

iframe.src = "http://target.com";

iframe.contentWindow.postMessage("some message", "*");

Pros:stealthyCons:killedbyX-Frame-Optionsandframebusters

Page 14: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

PostMessage AttackVectors

Method2:openinganewwindow

var targetWindow = window.open("http://target.com");

targetWindow.onload = function() {

targetWindow.postMessage("some message", "*");

}

Pros:notaffectedbyX-Frame-OptionsCons:morenoisy

Page 15: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

PostMessage inChromeextensions

• ChromeextensionsusepostMessage APItoreceivemessagesfromexternalwebsites(e.g.translatorservices)orwithinthesameorigin(especiallyindevelopertoolsextensions)

• postMessage datacanbepassedintobackgroundscriptcontext,andinsomecasesevenreachOSviaNativeMessagingAPI

Page 16: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

MOUNTINGEXTENSIONSANALYSISPartIII

Page 17: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

TheResearchSteps

• Downloadextensions(WebDevelopmentcategoryonly)

Page 18: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

TheResearchSteps

• ParseCRXfiles(https://github.com/vladignatyev/crx-extractor)

• ConverttoZIP• Unpack

Page 19: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

TheResearchSteps

• ParseManifestfile,findcontentscripts• ParseeachcontentscriptwithAcornJSparser(https://github.com/ternjs/acorn)

• LookforpostMessage listenerswithanAcornplugin

Page 20: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

TheResearchSteps

• LogeachpostMessage listenerfoundintolocalelasticsearch

Page 21: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

THERESULTSPartIV

Page 22: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

ReactDev Tools

• HavegotpostMessage protectionjustrecentlybyanexternalPR:

Page 23: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

ReactDev Tools

• Priortothefixmessagewasvalidatedbyjustcheckingaspecialproperty(whichisusercontrolled):

Page 24: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

EmberInspector

• Nooriginvalidation,but,luckily,datadoesnotreachsensitiveparts.

Page 25: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

AngularJS Batarang (Angularv1.x)

• Developershavenocluehowtovalidateorigin

Page 26: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Augury(Angularv2.x)

• Again,originvalidationisjustcheckingamagicstring

Page 27: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Augury(Angularv2.x)

• Auguryemploysinterestingmessageserialization:

Page 28: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Augury(Angularv2.x)

• XSSonanywebsitewiththeextensioninstalled

Page 29: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Augury(Angularv2.x)

Page 30: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

LanSweeper ShellExecute

Page 31: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

LanSweeper ShellExecute

Page 32: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

LanSweeper ShellExecute

Page 33: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

THETAKEAWAYSPartV

Page 34: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Thetakeaways

• Forusers:– donotinstallshadyextensionsfromunknownpublishers

– checkrequestedpermissions

Page 35: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Thetakeaways

• Fordevelopers:– payattentiontooriginvalidationinmessagelisteners

– consideroriginbypasstricks– donotrelyonmagicstrings

Page 36: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Thetakeaways

• Forbrowsers:– shouldprovidebuilt-inoriginvalidation– seegetMessage proposalby@homakov

Page 37: PostMessage Security in Chrome Extensions · 2020. 1. 17. · PostMessagein Chrome extensions •Chrome extensions use postMessageAPI to receive messages from external web sites (e.g

Thankyou!