Hacker News new | past | comments | ask | show | jobs | submit login
I “found” the database of a college app (2018) (yoginth.com)
109 points by yoginth on June 9, 2019 | hide | past | favorite | 99 comments



As far as I know, none of these keys (except the email/password) are considered a secret. The real problem here is that they aren't using Firebase/Firestore rules to correctly limit database access.


Visible key isn't the bug. The bug is that the app should not have read access to other students.


Yep. Although this exact thing has happened to so many apps I’m beginning to doubt the wisdom of this “allow completely open dev settings at first and then YOU get to remember to fix it” model that fire base uses.

Maybe they could require an IP whitelist if the permissions aren’t set yet or something.


This is the cause of many mongodb and redis woes as well.


permissions are a pain... i am considering centralizing permission handling in a separate service environment so that every service I have shares the same permission logic.

It is a shame since we could save some latency time by having permissions implemented in the same language and app that it is being requested. But to avoid stuff like that in the article I believe the cons are worth it

edit: the user had direct access to the database. No amount of code would mitigate that. Moral of the story is NEVER leave your database open to public, always hide it behind a service wall


Security and usability are always at the opposite end of the spectrum. Balance it wisely.


This is such a dangerous false dichotomy. Plenty of security systems benefit user experience.


And the security of a system can be completely undermined if nobody uses it because of poor user experience.


And in fact some systems are only usable because of their security. A bank that gives all accounts the same password could hardly be considered usable, neither could many websites if they did the same.


What makes this even more sloppy for the school is that I know for a fact that Firebase will send your admin account an email when it detects that you have weak security settings on your database. It also sends said email repeatedly, once per day.

I know because I intentionally have a developer db that is read access for the whole world and I get that email every afternoon. The admin of this app either is not competent enough to know what that email means, or is willfully ignoring it.


Or registered on a "throw-away" gmail account created for this app that no one is reading.


> The admin of this app either is not competent enough to know what that email means, or is willfully ignoring it.

Or it's being filtered into their junk folder.

I'm not making excuses for them, btw (there's just so much else wrong here): just pointing out that this happens quite often with even legitimate automated messages.


The media would have a field day and say that he hacked his school database. It's crazy how so many institutions are doing the digital equivalent of leaving an unlocked car in a bad neighbourhood and no one holds them accountable. Most people understand the concept of an unlocked car, not many understand that he didn't do anything special to hack his school db. He just strolled right in.


> he didn't do anything special to hack...

Someone who snatched a purse out the hand of someone else isn’t “doing anything special” either. The illegality doesn’t hinge on the difficulty of the action. Why is that so hard to grasp for technical crowds?

If you find a car with the keys in the ignition and the door unlocked, you won’t get away with driving it a block down the road by telling the judge: “Oh, but it was obviously insecure, and I was just testing to see if I could steal it”.


The data that's available isn't the school, it's student data! The school left the students "cars unlocked" and no one holds them accountable. They just say that people shouldn't steal cars.


They left the car unlocked in the same sense that your home is unlocked. With the right tools, it’ll take me 5 minutes to gain entry. I could then claim that it’s your own fault I gained entry because you don’t have a metal enforced door, steel bars across windows, and a lock that can’t be easily or Hardily picked...

Yes, someone technically minded with the right tools and access can break in. But that’s less than 5% of the population, very similar to the percentage who could easily pick even a complicated lock, but Of cause near 90% will be able to take an ax to a door or kick in a window.


Even with that house analogy, I'd argue that you shouldn't store large volumes of other people's sensitive personal data in a house that has the bare minimum security.

The issue is organisations being reckless with our data and then blaming hackers when they lose it. It should be common sense that if you have sensitive information then it needs an appropriate level of security but someone companies have convinced everyone it's not their fault


This is more like walking up to the bank at night and jiggling the door handle then telling everyone it’s unlocked and the alarm isn’t on.


The author straight up admits to scraping the database!

That's clearly a point at which "Hm... I think this is insecure, can I actually pull this?" turns into criminal behavior.


I think this is where analogies between physical theft/trespass and digital access break down.

Pressing the handle down, maybe even opening a door, but not walking in and not taking anything. No theft, no trespass. AFAIK in my local laws trespass requires entry and theft requires carrying-off. Indeed -- apparently -- you're legally allowed to enter abandoned properties if you don't break-in.

That to me is equivalent to access, maybe even duplication (proving access with no 'alarms'), of digital data. When it becomes immoral is when you use that data, or make it available for use by others.

Of course the CMA(UK)/CFAA(USA) don't see things this way they both seem to make the equivalent of 'looking in the direction of a door and noticing it's open' into an illegal act.


> When it becomes immoral is when you use that data, or make it available for use by others.

That's logically consistent but shockingly permissive. And to be frank, I don't believe for a second this is really a principled opinion on your part, it's an excuse.

You'll get behind the hacker linked on HN out of solidarity or for some other personal reason (maybe you hate schools, or java). You'd never forgive someone for walking in and lifting your photo history due to a security lapse by Facebook, even if they never "used" the data nor "made it available for use by others". And that is why this behavior is criminal.

Be real.


> Be real.

This is apparently a curious student that discovered a vulnerability and, judging by the way that blog post is written, is unsure how to properly disclose it. If this was your Facebook analogy, they'd have a relatively visible path to disclose that. Here, they have to potentially fear being reprimanded or criminally charged.

Under the premise that yes, granted, all that might technically qualify for some criminal act: The aspect of intent and malice are, imho, important in these discussions and should be for the corresponding laws. They found a vendor negligently handling student data, instead of dumping it somewhere, making a fuzz in the press or using it for something they try to disclose it (at least I'd hope so). It's not like the author abused that data, they tried out a proof of concept to see if access to other users could be gained. Not just out of solidarity that's something we should applaud and shield, instead of branding it as criminal behaviour.

For me this is more akin to past cases of people being reprimanded for trying to change URL parameters that are not sufficiently protected, while I see that it might be a philosophical standpoint rather than a legal one, I think the fine in these cases should go to the negligent company, not some curious individual without malicious intent.


Meh.

Your post to me is a bit like how people said "you feel violated, don't you" when we had burglars. I didn't feel violated, nor particularly care I'd had unknown people in my house -- what I cared about was the nuisance of making insurance claims.

>You'd never forgive someone for walking in and lifting your photo history //

Someone who looked at one of my photos to prove they could, or downloaded one - never shared it, never re-published it?? I wouldn't ever know, for one thing.

If they downloaded all my photos and never used them? Am I supposed to be angry?

>it's an excuse //

What do you think I'm excusing?

You mention school, so say someone hacks the school network, they don't share any of the info ever with anyone, don't use it in any way -- except perhaps the only result is they anonymously inform the school they have a breach -- what's immoral there? (Yes, practically you move the legality toward the easily measurable act of making access assuming immoral intent, I understand that.)


> If they downloaded all my photos and never used them? Am I supposed to be angry?

Send them to me then. I promise I'll never look at them.


> Why is that so hard to grasp for technical crowds?

Because laws concerning actual theft are objectively defined, and are logically consistent with themselves and other laws.

Laws about 'hacking', where the crime is simply a message, not a physical action, are extremely subjective. It revolves around intent more than the action.

For example: If a user goes to the website of theirbank.com and the root page is a list with all the credit card numbers of all the clients. Is he committing a crime? He used computers to get information that he shouldn't be allowed to see. Most people would say: no, he only wanted to visit the website.

If I see that the bank's API has no security, am I committing a crime?

If I use SQL injection to see all the users data, am I committing a crime?

Most people would say that it depends on intent, but intent is extremely subjective, and IMO a pretty bad way to define laws.


I did this when I was at high school with a friend. Basically the place had a shared Windows file system, and the only thing that prevented everyone from viewing it was that it was hidden in the UI. On the drive was lots of data, including some applications in PDF format - completely unprotected - full of personal information of minors.

At the time we had recently covered data protection in IT class, so we wrote up a document explaining what we did, and why it was bad, and gave copies to a few people in prominent positions (principle, head of IT, IT teacher) as well as posting it (with instructions redacted) on an internal message board.

Well of course they didn't take it very well. They threatened to expel us and call the cops, and suspended us for a week until they decided what to do. In the end a well written warning from my friend's parent made them drop the issue and let us back in. I doubt they did anything to change the "security".


The car analogy would be:

  He saw a car
  He tried the doors until he found one that was open
  He climbed in and searched everywhere until he found personal information about other users of the system
Even though the security of this system was poor, he still (probably) broke the law. There are plenty of opportunities for people with some knowledge of IT to abuse their power, but it's our responsibility not to do so.


He looked in the window of a car and saw tons of users' personal information -- visible through the window! Any criminal could walk by and copy the info, privately, without anyone knowing. Maybe some criminals already have.

I think the important thing we miss with car/physical crime analogies is that cybercrime can be so invisible. Nothing is missing, nothing is taken... but users private data is lost. So if an organization is doing something terribly naive like publishing passwords to userdata in plaintext... it's disgusting for our society to punish the wrong people, the people pointing out the flaws rather than the ones who cause them. All the really malicious entities came and went and will never be caught.

They put private information into a JSON file accessible by an HTTPS GET, the only password being one that they put in plaintext onto everyone's phones.

My analogy: They put the private information onto a billboard, but you can only see the billboard from a particular vantage point in a public park.


>He looked in the window of a car and saw tons of users' personal information -- visible through the window!

The information was still behind a door that you had to unlock. They just unwittingly sent keys to everyone.


If everyone has a key, it’s not really locked.

I guess a key is a legal metaphor and not an actual physical device. Huh.


Exactly, it's like leaving your customers' cars unlocked in a bad neighborhood


He downloaded the apk and extracted the database key from it. This is probably beyond the means of >98% of people of people. To be fair there have been instances were literally just editing the route on a URL to view a different document has resulted in hacking charges, I wouldn't go to such great lengths to defend this guy.

If you go up to someone's house and look under their welcome mat and find a key, is it okay to unlock the door and stroll in with the rationale that the poor security counts as consent to enter?


Not only are they leaving it unlocked, they are handing the keys to anyone who downloads the app.


Like keeping your unlocked filing cabinet on the front porch...


Did someone verify any of this?

If I recall correctly this `yoginth` is a known fraudster.

See: https://twitter.com/sindresorhus/status/1015873644377935874 or https://twitter.com/natfriedman/status/1059865722904440833


Pretty sure it’s the same person from what I could find out from archive.org snapshots. I followed this trail:

- From the tweet you linked, it’s clear that they owned yoginth.ml

- Archive of the homepage links to a gitlab profile [1] which uses the same profile picture and style of writing as their current gitlab profile.

- The page linked to yoginth.ml, and subsequent snapshots of page show it changed to yoginth.com (the current domain).

Additionally, I noticed that they mentioned that they work at “DocsPen”. Quick google linked to a repository with years of history (evident from the migrations page), but everything committed in 2017. Looked up, and it’s essentially another unattributed copy of BookStackApp with licenses changed and s/BookStack/DocsPen.

Unfortunately, it seems its a case of naive plagiarism and not knowing what counts as fraud. I say this because there’s enough information to get their entire identity (I’m not gonna post a link to that) and it’s clearly a school kid who’s misguided enough. If OP reads this, I’d suggest them to reflect upon their actions, (or cover their tracks more carefully). Sooner or later, if authorities get involved it won’t be difficult for them (I just did archive.org search on my phone). I feel a bit more aware of this because I studied at Delhi University and I knew a few people who did/do similar things to get enough attention and build a resume.

[1] https://web.archive.org/web/20180213200624/https://gitlab.co...

[2] https://web.archive.org/web/20190312041322/https://gitlab.co...

[3] https://github.com/DocsPen/DocsPen/tree/master/database/migr...

[4] https://github.com/BookStackApp/BookStack/tree/master/databa...


Yeah, Docspen was a copy of BookStack. Was a really awkward and difficult thing to handle as maintainer with BookStack being my first popular OS project. It was done very purposeful in an odd way. I remember that issues, filed by BookStack users, were being re-created on the docs pen repo by (potentially fake?) docspen maintainers with pretty much the same text.

Yoginth would then commonly create issues on the BookStack repo, many of which would be issues with DocsPen and not BookStack, and would email me asking to deploy new releases. I remember being at-a-loss of how to handle it, I raised my concerns [1] and asked for advice on reddit[2]. The docspen repo then suddenly moved to GitLab before being hidden. Yoginth then deleted all issues and comments made in the BookStack repo, or this may have been just part of a full account deletion.

[1] https://web.archive.org/web/20180130085921/https://github.co... [2] https://www.reddit.com/r/opensource/comments/7v7yl5/advice_n...


Interesting. I have a hunch that this all is an attempt to game Google Summer of Code to win sponsorship. I think the sponsors look for open source contributions, and they created all the copies, organisations etc. to make it seem like significant profile. It’s crazy that people would go to such lengths. Like you said, it’s very odd, and sloppy.


Hey, that is too old and I have done it without knowledge, it's my mistake and I apologized for all of them personally and publicly!

Here this app belongs to my college, it's my attendance and work is mine!


The first linked tweeter thread is from July 2018, the second is from November 2018. I don't classify that as "too old". And your article is dated October 25, 1028, so it's approximately the same period of time.

Also, your article is extremely similar to https://medium.com/@fs0c131y/how-i-found-the-database-of-the... (Oct 16, 2018)


That's the time I found the bug by the inspiration of "Elliot Alderson"


For example compare:

> Static Analysis

> From my phone, I exported the APK to my computer. I used the app called APK Export

> Play Store Link

> I used apktool to get the resources of the app.

> I used jadx to obtain the decompiled source code from the extracted DEX file.

> Now, I have everything I need.

----- with ------

> Static Analysis

> 1) From my phone, I exported the APK to my computer. You can use this app for example:

> [APK Export (Backup & Share) - Apps on Google Play]

> 2) An APK is a ZIP file, so I unzipped it and extracted the DEX file.

> 3) Thanks to jadx, I managed to obtain the decompiled source code from the extracted DEX file.

> 4) To finish, I used apktool to get the resources of the app.

> Now, I have everything I need.


You're still plagiarizing today:

https://gitlab.com/yo/hackathon-countdown/blob/master/js/ind...

is the same as

https://gist.github.com/iamkdev/6bcb79670f72ff346590#file-sc...

but you did not include his license.

The same is true for many other projects on your GitLab profile. Many of them are just snippets from Stackoverflow which you decided to turn into a repository with copyright in your name, for some reason.


I added now! https://gitlab.com/yo/hackathon-countdown/blob/master/LICENS... while exporting from codepen I can't find the license!


You've built an entire online presence by copying everything from other people's work - from your blog theme to your content "without knowing"?

Adorable.

Also, by briefly reading the docs on the "platform" you are trying to peddle, I'm getting fairly certain you also copied that as well, as it is too well written in comparison to the drivel on your blog.


In all fairness on that last point, if you're referring to his "Gitote" project, the author has stated here [0] that it was a fork of Gogs, and seems to have retained the proper copyright notices in the source files:

"// Copyright 2015 - Present, The Gogs Authors. All rights reserved. // Copyright 2018 - Present, Gitote. All rights reserved." [1]

I agree it should probably have been given more prominent mention, but given the number of commits doesn't seem (at quick glance) to be a hasty "fork and rename".

[0] https://news.ycombinator.com/item?id=20137624 [1] https://gitlab.com/gitote/gitote/blob/master/gitote.go


It was accepted by the founder itself https://twitter.com/jc_unknwon/status/1066713466524848128


Please don't gang up on someone like this on HN. It's fine to challenge incorrect information, but not to aggressively humiliate them.

https://news.ycombinator.com/newsguidelines.html


How does one plagiarize and attempt to profit off somebody else's work without knowing it?

It's ingenious to say you've apologized while at the same time saying you didn't knowingly do anything.


Even his other blog post are plagiarizing this Github Blog post.

GH: https://github.blog/2018-03-01-ddos-incident-report/

Yoginth: https://archive.is/EfMFq


A school that tracks attendance cannot be called a college or university. Kindergarten, I can swallow.


I'm not sure if you are in the industry, but attendance tracking is high up on most institutions lists of metrics to track. Aside from helping out the usual back office data, it's often a key indicator for students who are in trouble. The institution can then reach out and assist these students.


They might just not be from the US. Here in Germany, tracking or forcing student attendance is subject of large discussions and generally often frowned upon (or forbidden by regulation) in the University setting these days.


This is mind boggling. Failing someone for missing one or two classes is ludicrous, but giving someone a certificate who didn't engage with the course is equally so. University education isn't about the destination/exam it's about the journey.


Not sure why you'd think that not tracking attendance means that people do not attend. Pure attendance does not guarantee good performance and in filled lecture halls there's often not much to "engage" with anyhow.

We see this as academic freedom, if you miss out on in-person seminars you won't pass, if you do not go to some lecture because you have to work and teach yourself afterwards, who cares.


This is a common practice in Europe as I understand, not just Germany.

The thinking as I understand it goes along these lines: there are requirements to get a degree (thesis, pass exams, score high enough in exercises), but the university is primarily a center for learning and you are an adult, so how you achieve the abilities to fulfill the requirements is your own business. If you want to do things on your own, you are free to do so.


Also, it is seen as a test by itself: Are you capable to take your responsibility and do your work?

This is a quite valuable lesson by itself. Most people need a few months to learn it (partying is fun, but doesn't get you a degree), some don't and indeed drop out.


> University education isn't about the destination/exam it's about the journey.

Showing up for lectures is by far the least important part of the journey. It's a passive activity that usually adds zero value versus watching lessons on YouTube or reading the textbook.

The real learning (IMO) is in doing the assignments, networking with people in your residence, social activities, internships, etc.


A degree is a class signifier, its only value is that it costs.

Most degrees you'll have to teach yourself and then when you graduate you get to advertise that you were willing to submit mindlessly to the system and do as you were told. Both of which are very valuable to employees.


University education isn't about the destination/exam it's about the journey.

There are more paths to the final destination than just turning up to all of your lectures, particularly if a lecturer is not doing a good job of presenting the material.

One of the controversial issues here in the UK at the moment is how much students are now paying for their university fees compared to how much value the university offers in return. Governments over the past generation or so have turned undergraduate degrees into a much more commercial proposition: you're taking on a lot of debt, but you're leaving with (in theory, according to the marketing brochure) much better career prospects.

At the same time, advances in technology and communications are rendering obsolete the old school lectures where you turn up and transfer the lecturer's notes from their paper to yours without passing through either brain along the way. You can find some of the best presentations of subjects ever given in freely available videos online today. Manually transcribing notes (or typing them on your laptop, or whatever) is largely a waste of time when you can just download well-written notes and spend your time in a lecture actually concentrating on understanding the material. For many courses, you really need to look at multiple sources anyway, to avoid getting tied up with a single view of the subject or a single expert's personal style of presentation and notation.

So if you said to a typical UK undergraduate today that the most important thing about their university journey was to attend all of their lectures, even when they're being phoned in by some researcher who is simultaneously daydreaming about their latest funding application, I don't think many people would agree with you.


You can get much more out of Uni but IMO a degree certificate is, and should only be, a measure of ability to complete the stated academic requirements.


I think OPs point was about using attendance as part of assessment.


In the UK, I think universities have to track attendance if only to make the immigration authorities happy.


Yes, it's part of the conditions to be a sponsor of "Tier 4" (student) visas.


Here in India, the University I attended requires a minimum attendance of 75%, or they won't allow you to sit the end of semester exams. Your attendance even accounts for 5% of the score of your end of semester exams for that course. Quite insane when you think about it.


And having a full day class on Saturday when a weekday was lost due to bad weather or strikes.


What sort of bad weather are we talking about here? Also, is this due to the commute becoming difficult/impossible in the weather, or because the facilities/lecture theatres are leaky/poorly constructed, or something else?


For Kerala, its heavy rains. Flooded roads with open drains and deep potholes, bad electricity poles and transformers, lines touching trees etc. Engineering and business college norms require sturdy buildings and a few AC rooms.


Interesting, thanks!


My university didn't officially track attendance, but lecturers did track it nonetheless. Poor attendance was used as a metric when deciding whether somebody deserves a late submission, resubmission, or aegrotat.


I attend a public school in the United States, and attendance is de-facto enforced by questions that you answer during class (using iClickers, or by quizzes you turn in at the end).


You never had a friend bring your iClicker in for you????


Unfortunately, my friends in the class have annoyingly moralistic views on academic honesty, and the professor made it quite clear what the consequences of doing this would be :(


> Unfortunately, my friends in the class have annoyingly moralistic views on academic honesty

Their is nothing wrong by adhering to the rules of a school, and I think it is not that good that subverting the rules is such common practice that actually following the rules is considered annoying. If the rule is so egregious that it can not be followed then sure, but showing up is literally the easiest part and statistically has strong correlation to better performance.


> statistically has strong correlation to better performance

Not this class.


ETH Zurich, by most metrics one of the better universities in the world, tracks attendance.


Although I agree. The attendance requirements meant that we went to tutorial "class sessions".


I had to code-review a Django app using Firebase as a DB and swore never again. He did features and promised to do validation and security later by going to their editor and writing Javascript files. Django lets him write valid forms and correct SQL queries in almost same lines of code. Pagination was a pain in current version and present only in a version forever in beta. All the hard work coaching him on exceptions went out of the window.

An Android dev finally enlightened me where Firebase shines: offline sync of mobile to a server by eliminating lots of explicit CRUD calls and error handling.


An Australian autistic developer found a top university's custom authentication database exposed to the internet in less than 10 minutes. Please, no more DIY crypto or running unaudited services willy-nilly. :prayer-emoji-here:


I’m not familiar with Firebase, but is it unusual for end users to have direct access to a database at all? Why isn’t there a web front end there?


Firebase has a "rules" feature where you set up security/authorization rules on your database:

https://firebase.google.com/docs/database/security#section-a...

There's a "development" mode you can enable on your database that simply ignores all of the rules. The college app either 1) has no/unsafe rules set up, or 2) left their Firebase database in development mode.


Good spot, but be careful in the future in your approach. Some places will nail you for having not stopped at the point where you unpacked the apk resources and noticed the API keys. Downloading the credentials might not have been the smartest move.


Is there any way to hide keys from the extractions? I tried it before and ended up to find that users can do that if they really want to.


I think we can't hide keys up to my knowledge!

But make sure you just switched firebase to production mode.

In my case, the firebase was in development mode and the data is available public!

https://yoginth.com/college-hack#mitigations


It’s not about keys or modes, it’s about the rules they didn’t set up. Everyone uses firebase like that. Those “keys” are required to allow you to connect to the correct firebase app, nothing more. You don’t get any direct special permission to do things on the database or storage. Here some more info about the rules: https://firebase.google.com/docs/database/security


Firebase keys give you access to the database, which can be public. You just have to setup rules for the database, usually so users have to be authenticated to view anything and can only read their own private info.

edit: just realized you may have just been asking about hiding keys in general. Sorry if this wasn't what you were asking about!


> Don’t put your API keys, Tokens and Secrets visible easily

I was just confused at this part because permission & rules are the solution as far as I know. Thanks for the reply though :) I'm prettry sure now that exposing keys are no problem.


I'm not a mobile dev, but aren't there utilities like KeyStore for this?

https://developer.android.com/training/articles/keystore.htm...


Well, the trick is that using a KeyStore ensures that the key doesn't leak into the application (but is only used for cryptographic operations in a trusted environment).

However, you would need the plain key to authenticate against the database so using this wouldn't work.


Gotcha, I see the problem now.


Read-only access through intermediate proxy that you control (but not to all data like here) + login required for more access (via intermediate proxy or direct).


No, but I think the idea is to create a web API that connects to the database instead of having the phone connect directly to it.


No, you can only obfuscate it but the correct way to do this is to limit the access scope of the access key.


No, you can just obfuscate it and make it painful to extract to potential reverse engineers.


Isn’t this the opening to film Wargames?

Has Joshua asked you to play a game of global thermonuclear war yet?


Is Gitote a fork of Gogs/Gitea?


It's a fork of Gogs!


This seem to be the default on most G services.


ITT everybody doing the same!




Consider applying for YC's Spring batch! Applications are open till Feb 11.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: