[Entry] Figuring Out HTTPS MITM in India
This commit is contained in:
parent
80f081189c
commit
71a04890e5
|
@ -0,0 +1,107 @@
|
|||
+++
|
||||
title = "Figuring Out HTTPS MITM in India"
|
||||
date = "2021-12-25"
|
||||
author = "Ceda EI"
|
||||
tags = ["security", "internet"]
|
||||
keywords = ["security", "internet"]
|
||||
description = "Being served a MITM page over HTTPS"
|
||||
showFullContent = false
|
||||
+++
|
||||
|
||||
Belonging to India, I am very used to seeing random websites being blocked.
|
||||
However, today was particularly scary because the [MITM (Man In The Middle
|
||||
attack)](https://en.wikipedia.org/wiki/Man-in-the-middle\_attack) happened over
|
||||
HTTPS. I visited [usebottles.com](https://usebottles.com/) over HTTPS and was
|
||||
served with the following page.
|
||||
|
||||
![](/images/usebottles\_censored.webp)
|
||||
|
||||
Notice the padlock in the address bar. Checking into it, the certificate is
|
||||
valid and signed by [Cloudflare](https://cloudflare.com/).
|
||||
|
||||
![](/images/usebottles\_certificate.webp)
|
||||
|
||||
## Further Exploration and Hypothesis
|
||||
|
||||
The initial hypothesis was that the Indian Government or the ISP has
|
||||
Cloudflare's signing keys and are serving the blocked page over HTTPS. This
|
||||
seems unlikely however and would be a very severe thing and would essentially
|
||||
erode all trust in HTTPS at scale as Cloudflare can sign any website's domain
|
||||
which essentially means that ISPs could MITM
|
||||
|
||||
After a bit of exploration, the DNS entry of
|
||||
[usebottles.com](https://usebottles.com) points to `172.67.197.25` and
|
||||
`104.21.92.184`. I checked that both of these IPs were owned by Cloudflare. To
|
||||
ensure that the DNS entries weren't being MITM attacked either, I checked for
|
||||
the same from my Hetzner Server.
|
||||
|
||||
The second possibility that arises from this is that Cloudflare itself was
|
||||
serving the blocked page. While more likely than the previous scenario, it is
|
||||
still unlikely generally. I looked for any notices from Cloudflare about this
|
||||
and could not find any.
|
||||
|
||||
At this point, I was mostly out of ideas. I looked into the source of the page
|
||||
and found something interesting. The entire page's source was the following
|
||||
(invalid) HTML:
|
||||
|
||||
```html
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0" />
|
||||
<style>
|
||||
body {
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
iframe {
|
||||
width: 100%;
|
||||
height: 100%
|
||||
}
|
||||
</style>
|
||||
<iframe src="https://www.airtel.in/dot/" width="100%" height="100%" frameborder=0></iframe>
|
||||
```
|
||||
|
||||
The most interesting part of this was that the iframe's URL pointed to
|
||||
[airtel.in](https://www.airtel.in/). Airtel is an ISP in India, however, I was
|
||||
not using internet services from Airtel.
|
||||
|
||||
My presumption is based on this.
|
||||
|
||||
## Final Hypothesis
|
||||
|
||||
This is what I presume is happening.
|
||||
|
||||
```
|
||||
Me <---> Cloudflare <---> usebottles' server
|
||||
1 2
|
||||
```
|
||||
|
||||
So far, we have been assuming the MITM is happening at `1` i.e. between Me and
|
||||
Cloudflare. However, the fact that `2` is secure isn't guaranteed.
|
||||
|
||||
My best guess is that the Cloudflare server I am getting connected to happens
|
||||
to be using Airtel as the ISP. When Cloudflare's server tries to connect to
|
||||
usebottles' server, Cloudflare gets MITM attacked by their ISP - Airtel.
|
||||
Likely, SSL is not enforced between Cloudflare and usebottles' server. Thus,
|
||||
Cloudflare connects to usebottles' server over HTTP.
|
||||
|
||||
Normally, a connection would happen the following way:
|
||||
|
||||
1. I connect to https://usebottles.com/
|
||||
2. I get connected to Cloudflare's server.
|
||||
3. Cloudflare's server reaches out to usebottle's server.
|
||||
4. usebottles' server sends a response.
|
||||
5. Cloudflare signs the response with the certificate.
|
||||
6. I get a webpage over HTTPS.
|
||||
|
||||
What seems to be happening is:
|
||||
|
||||
1. I connect to https://usebottles.com/
|
||||
2. I get connected to Cloudflare's server.
|
||||
3. Cloudflare's server reaches out to usebottle's server.
|
||||
4. **Airtel intercepts the request and sends the blocking page**
|
||||
5. Cloudflare signs the **blocking page** with the certificate.
|
||||
6. I get **blocking page** served over HTTPS.
|
||||
|
||||
I would be interested in knowing if there are any alternative explanations to
|
||||
this or something I have missed. You can [contact
|
||||
me](https://webionite.com/#contact) to let me know!
|
Binary file not shown.
After Width: | Height: | Size: 6.6 KiB |
Binary file not shown.
After Width: | Height: | Size: 26 KiB |
Loading…
Reference in New Issue