EFnet Paralyzed By Vulnerability
An anonymous reader writes "EFnet member Fionn 'Fudge' Kelleher reported several vulnerabilities in the IRC daemons charybdis, ircd-ratbox, and other derivative IRCds. The vulnerability was subsequently used to bring down large portions of the EFnet IRC network."
By crafting a particular message, you can cause the IRC daemon to call strlen(NULL) and game over, core dumped.
1998 called and want their attack vector back.
The world's burning. Moped Jesus spotted on I50. Details at 11.
This is the problem you get when your strings don't know their allocated size like in that ghastly language Pascal.
Who needs security vulnerability when you have a complete lack of services and modern IRC features?
which projects are now going to close their doors to full disclosure? this was posted on the ircd's own bug reporting systems and was publicly visible. if it were not, and only the developers and higher level users (such as the nodes of efnet or freenode) should be able to see reports of this nature, this sort of attack may not have happened and the ircd's could have been silently patched without anyone knowing.
on the other hand, if you close your doors, you obviously have something that requires hiding, drawing more attention.
what will projects do next?
portfolio
Now I can finally get that nickname I have been wanting since 1999 !!
This is a good case of bitrot here, code that had made assumptions about what the other parts of the code were doing..and fail. Brown paper bag day for me on EFnet :P
Using error handlers, & two pointers (this goes for ANY array, & strings are just arrays of characters/array of char):
---
1.) You send two pointers into/@ the array/string buffer allocated, as follows:
2.) 2nd "double-sized" one (positionally) is ALWAYS double the size (position) of the 1st.
3.) When the 2nd "double size of the first" FAILS (& the err handler catches it, ala try-catch/try-except type constructs)?
4.) The error handler passes back the size of the 1st "half-size pointer" location, & doubling it gives you the size of the array/string!
---
* THIS COULD BE USED TO TEST THE SIZE OF THE ALLOCATED SPACE FOR THE STRING BEFORE WRITING TO IT, first!
** ONLY PROBLEM IS, original C & Pascal implementations DON'T HAVE ERROR HANDLERS like Try-Catch/Try-Except/On Error GoTo etc./et al that C++ &/or Object Pascal do!
BUT YOU CAN "RIG IT" for error handling ala -> http://blog.staila.com/?p=114
(@ least afaik - I haven't worked with THOSE languages in almost 20 yrs. & certainly not ALL implementations, more modern ones MAY... I don't even remember if there is a way of "rigging" that into them vs. structured error handling built into their compilers).
---
However - Delphi Object Pascal has this (but not sure on original pascal implementations though, been DECADES since I did Turbo Pascal for DOS even).
Then - Even C has strlen... & that could be used to check this "hole" they are having a problem with, don't ya think?
* Any takers on that? Should work, in theory @ least, on C strings & their size... because it does on arrays you don't know the length of!
Lastly?
STRAIGHT Pascal, for lack of a better expression here (not Delphi, that's Object Pascal) could be done the same since it has pointers & can do the same type of testing the string array buffer, & it too, by the by - since it has a LENGTH function that can determine the size of a string as well...
You can "bust my balls" on this one IF I am off, I didn't read the article, but... it's an idea here, that *MAY* work!
APK
P.S.=> And, there you are... & not that THIS really matters, but, ONCE YOU HAVE THAT - you can "Trim" function the string chopping off the rest of it leading or trailing: There's examples of that in C & PASCAL all over online!
(I know for a fact Delphi Object Pascal has trim/rtrim/ltrim type functions built in, and C++ has functions you can find even online for it, since I don't recall it being part of the "std. string library of functions" but it may be in diff. dialects of it though, like C++ Builder) if its blanks etc./et al...
... apk
The problem isn't performance as much as it is accessibility. Almost every UNIX system has a C/C++ toolchain installed, not so much with Lisp, Java or C#. Also, C and C++ are generally the lowest common denominator for contributors. Almost everyone knows a little bit about C, not so many people know about Lisp (which is a travesty in and of itself, but not my problem).
I haven't used efnet much in years... but am pretty active in a few channels on freenode.. Most active development platforms/projects have freenode channels these days.
Michael J. Ryan - tracker1.info
Throwing C++ into the same category as C is a bit retarded, is it not?
Throwing C++ into the same category as C is a bit retarded, is it not?
It's a lot retarded. But that never stopped anyone before.
They should change the name from EFnet to EFFYOUnet.
#DeleteChrome
blammo - you should have checked if s was null first
Unless you're using Objective-C, where the "nil" is a special object that implements all messages (that is, methods) as a no-op that returns a nil.
Validate your fucking inputs, you moron.
That's the short version, the full version is
Validate all possible valid combinations of inputs are valid in all subroutines.
What language would you advocate, exactly?
The *EXACT* same problem (abrupt program termination) would have plagued the software if had been written in either C# or Java unless exception-handling code was in place to prevent it. Not so coincidentally, the effort spent writing such exception handling code in C# or Java could just as easily be spent on a simple null pointer check before passing a value to strlen in C. Not to mention the fact that neither C# nor Java even existed when ircd was invented.
This was a flaw that exploited nothing more technical than programmer oversight, which can happen just as easily in software written in *ANY* language.
File under 'M' for 'Manic ranting'
What language would you advocate, exactly?
Lisp
EFnet is some crappy IRC network people go to for help until they find out about freenode.
For large sets, this will be our guide even unto death, for the LORD will work for each type of data it is applied to...
Interesting call... Lisp existed back then.
Granted, this particular crash would not have occurred had it been written in Lisp, but the failure on the part of the programmers to anticipate the kind of input that might produce a crash in C could just as likely to cause catastrophic failure in a program written in any language, even Lisp. Ultimately, the problem was not programming language choice - which is my whole point.
File under 'M' for 'Manic ranting'
Haskell didn't exist in 1992 either.
File under 'M' for 'Manic ranting'
only if you use it ,pretty much like a null ceack or a try catch;
Jehovah be praised, Oracle was not selected
As per http://www.openwall.com/lists/oss-security/2013/01/01/3 this issue was assigned CVE-2012-6084. Remember folks, you can get your CVEs in advance which makes life easier for everyone. Please see http://people.redhat.com/kseifrie/CVE-OpenSource-Request-HOWTO.html for details.
The major difference between exceptions and null checks is the granularity. You can for example have a try/catch around the whole function parser that will kick in on any sort of failure and just say "whoops, something bad happened parsing this command" and it won't really matter what part inside that failed as long as you can recover, in that case probably by just ignoring that command and keep running. With null checks you must have one in every possible place you might call a null pointer. Particularly for a server then it can often happen that this client session is borked because it triggered some kind of "impossible" exception, you have to kill it but unless the entire server state is borked you don't need to kill the whole server. It's actually one of the things I hate the most with C/C++, without exceptions then one error means the whole application goes boom.
Live today, because you never know what tomorrow brings
Only if simply ignoring errors and continuing in the program's main event loop is adequate. This can be the case with many programs, but can very easily cause side effects resulting from incomplete operations.
File under 'M' for 'Manic ranting'
"Screw you, apk, and the horse you rode in on. If I ever see you post here again, I'll bomb you as AC from Tor, meaning I'll NEVER run out of posts because I can change endpoint."
You know damn well I posted this in anger because you were accusing me of doing it anyway, and of being "Barbie". You, and anyone else who can read this, will notice that I posted with my UID and when I do post I don't post AC. I have posted embarassing stuff about myself IRL to prove this incorrect but instead you used this against me, making assumptions about my gender makeup and whether I am who I say I am.
I extended an olive branch, and you abused it by ranting at Barbie telling him/her she was me or vice versa. So who's the troll, apk??
Here, another olive branch to prove I'm not Barbie, go do a whois on www.rachelwilson.net.
This tagline was transcoded to result in at least one smirk. If you experience failure to smirk, please consult your Gen
Bullshit, most of that. You're so wordy, and you've got it so wrong. Fortunately, I have an IRL to go back to that encourages me to contribute positive change around me (unlike this place and people like you).
Thanks for ruining my evening after I simply told someone it was bad form to drag you down to that level after you posted something positive.
This tagline was transcoded to result in at least one smirk. If you experience failure to smirk, please consult your Gen
This all started because I completely disagreed about the use of HOSTs as compared to Adblock or similar, and you started personally insulting someone I know. Now, you're doing the same to me.
Defend myself, I'm a stalker. Ignore you, people might think you were correct. What a dilemma. You're one evil, uncaring guy, apk. Security tools = positive change? Try www.timberrecycling.org for positive change. Or www.manchester.gov.uk/elections. Or call Greater Manchester Police and ask them about Rachel Wilson. If they say they've never heard about me, mention Operation Protector, or Operation Foot. They've heard of those, and will be able to look up my details quick enough.
I find you ego-centric list of challenges disturbing. How, as you quite rightly point out, could I have the experience you have when you were born first, went to what seems like decent schools and colleges, and actually had friends and good teachers as a child? You have taken no time or care at all to ensure what you are saying is relevent to me at all. Why should I care? I know I'm a good person, and admitting to teasing you about HOSTS (Which everyone here does, because it's a PLAIN STUPID solution to a common problem!) does not make me a stalker at all.
In fact, I'd welcome any investigation into such because it would simply prove that I'm not Tomhudson, and that you are assuming you're talking to me when I'm not even there. I checked the link and parent, and no, that's not me.
This tagline was transcoded to result in at least one smirk. If you experience failure to smirk, please consult your Gen