I discovered a critical exploit in ZeroMQ with mostly pure luck
fangpenlin.com
fangpenlin.com
https://fangpenlin.com/posts/2019/10/07/elliptic-curve-crypt...
I don't know that everyone has one of these. But the professor I assisted for that aforementioned short stint also had a special braille printer, of course. I believe these printers have since advanced to the point of being able to render photos in a sort of limited fashion where the paper is indented to contour to lines. I believe there are also tactile tablets now for the visually disabled.
And yet you liked it... I wonder if this is a generational thing (I was born in 1980's)? Or "I don't run adblocker" thing?
In the meantime, I just use an image blocker extension when I encounter those articles.
My mobile browser (Cromite on Android, Chromium fork) also has a setting to toggle images, which is also good.
Imagine if they weren’t lazy!
This has got to be 30 years old or so:
According to Larry Wall, the original author of the Perl programming language, there are three great virtues of a programmer; Laziness, Impatience and Hubris
Laziness: The quality that makes you go to great effort to reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful and document what you wrote so you don't have to answer so many questions about it.
Impatience: The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to.
Hubris: The quality that makes you write (and maintain) programs that other people won't want to say bad things about.
Nah, they are alright. The real issue is they are so busy working, they never stop to really think about what they are building.
Those who are clever and industrious I appoint to the General Staff. Use can under certain circumstances be made of those who are stupid and lazy. The man who is clever and lazy qualifies for the highest leadership posts. He has the requisite nerves and the mental clarity for difficult decisions. But whoever is stupid and industrious must be got rid of, for he is too dangerous.”
-- General Freiherr von Hammerstein-Equord
* lazy - wants do as little work in the future as possible and so spends extra time now solving the problem the right way.
* lazy - has no consideration for the future and takes a straight line path to solving the problem now. Spends all future time fixing problems created from this approach.
This is not normal. It's amateurish in the extreme that leads to the only conclusion that whoever wrote this ZeroMQ thing is not a real software engineer. I.e. stay away at all costs.
I don't think that's a remotely fair assessment. ZeroMQ is a very large and quite popular project but it's also getting close to two decades old if I remember correctly. Any large C or C++ project that is that old is going to have quite a bit of historical cruft. And looking at some of the code that said vulnerability touched, most of that code was over a decade old.
Not to claim that it's any less severe but this is the nature of long lived projects. Unless they are massively privileged, they tend to have more code than eyes to look at said code and said code often was written in the bad old days.
I don't think writing arbitrary data into fixed-size buffer without boundary checks is just an artifact of being historical cruft, it's a ridiculous mistake no matter which time period it was written in. Whoever wrote that code decades ago was incredibly amateurish.
With such high standards I wonder why this people use such amateur software and not make or buy their own professional grade software.
Also sheds light why truly free open source software is such a thankless and hazardous activity
[1] http://hintjens.com/blog:106 [2] https://news.ycombinator.com/item?id=39880972
This just smells so much like a Javascript script kiddy who wanted to join the cool brigade and write something h4kor1sh in C. Ugh.
I'm dying at the idea that someone would think C is the "cool brigade".
Let's not pretend that the people writing the unsafe code are unimaginably stupid. They are extremely imaginably stupid, as we all are.
Buffer overflows are simple inexcusable, especially if its "we didn't bother checking" rather than "we got the size wrong due to human error".
The first case is not normal, people like that should not be programming HTML let alone C code.
Two do not expose zmq to untrusted networks.
edit: lol their website doesn't even have a valid cert http://curvezmq.org/
one: Is this documented somewhere? I use zeromq for the (internal, but by design usually accessible on the public internet) API of my project
two: what happened to zero trust? Every network is untrusted.
I've never dropped a piece of software as quickly as that.
Security is hard, and proxies/VPNs are cheap.
Do you have any specific reasons why this is a bad idea? Especially if it's been secured, as the article implies it was.
The other side of this is that while Pieter's writing was marketing genius, it was also woefully understating the complexity of any practical use case. The way I tried to summarize that to folks who were keen to try zeromq then was that they should start at the back of the book with the most complex example, and that's by far the simplest setup that they could hope to end up with once they start thinking about putting something into production. And everything leading up to that - a book no less - was exclusively educational/toy use cases.
Your API can be accessible obviously, but put ZeroMQ behind a firewall so only the API server can reach it.
If it’s running on the same server, at least block the port ZeroMQ is listening on from the outside world.
There are easier ways to achieve that than kubernetes with sidecar mesh.
That's like saying reading Hamlet is harder than writing it. What kind of garbage do you have to be filling your head with all day to hold such a dismal opinion of software?
"Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."
I strongly believe it's easier to write working code than it is to untangle it later on. Writing readable code is a skill.
Digging into other people's code, reading it, and having enough education and context to understand why they did things a certain way is an even rarer skill.
Also, it gives you the heuristics to decide if a code base is crazy and not redeemable.
Reading Hamlet such that you fully understand its internal structures and design and could propose changes to it that maintain cohesion and do not make it drastically worse is harder still.
"Reading" Hamlet is something my pet hamster does for breakfast.
"Dans les champs de l'observation le hasard ne favorise que les esprits préparés." -Louis Pasteur
In the fields of observation chance
favours only the prepared mind.
Variant translations of this or similar statements include: Chance favors the prepared mind.
Fortune favors the prepared mind.
In the field of observation, chance favors the prepared mind.
Where observation is concerned, chance favors only the prepared mind.
https://en.wikiquote.org/wiki/Louis_Pasteur#Quotesedit: "Louis Pasteur's quote "Chance favors the prepared mind" means that the better prepared and more knowledgeable you are, the more you'll be able to take advantage of any chance opportunities or observations.
"If you are unaware of things that influence a situation or an event, you are very unlikely to be able to identify any opportunity or learn anything significantly new. By having insight, interest, and aptitude related to the situation, you put yourself in the position to capitalize upon any hidden "nuggets" buried at the moment."