discordia-space / CEV-Eris

Death is our destination
https://discord.gg/QfEg7K7
Other
151 stars 499 forks source link

Nuke code can be bruteforced #8049

Open ghost opened 1 year ago

ghost commented 1 year ago

If someone knows 4/6 of the nuke code they can guess the final two in less than a minute in some cases. Inputting should incur a slight sanity loss to negate this because guessing nuke codes is scary. If they know 2/6 it takes roughly 20-30 minutes to guess, only a few minutes if the first two digits are low. Guessing the entire code would probably be impossible.

ghost commented 1 year ago

Someone nuked by guessing the code

assortedbeads commented 1 year ago

If they've gotten 4/6 codes I reckon they've already put considerable effort into blowing up the ship, so if they brute force it let them

thevandie commented 1 year ago

Let em brute force it lol

ghost commented 1 year ago

A topic limit should be introduced regardless, if not specifically a way of stopping people from brute forcing the nuke code. Lots of ways to lag/crash the server by spamming topics.

MLGTASTICa commented 1 year ago

Bullshit , we have topic limited.

ghost commented 1 year ago

Bullshit , we have topic limited.

You do not.

MLGTASTICa commented 1 year ago

Bullshit , we have topic limited.

You do not.

Prove it

ghost commented 1 year ago

Bullshit , we have topic limited.

You do not.

Prove it

`/client/Topic(href, href_list, hsrc) if(!usr || usr != mob) //stops us calling Topic for somebody else's client. Also helps prevent usr=null return

//search the href for script injection
if( findtext(href,"<script",1,0) )
    log_world("Attempted use of scripts within a topic call, by [src]")
    message_admins("Attempted use of scripts within a topic call, by [src]")
    //del(usr)
    return

// asset_cache
var/asset_cache_job
if(href_list["asset_cache_confirm_arrival"])
    asset_cache_job = asset_cache_confirm_arrival(href_list["asset_cache_confirm_arrival"])
    if (!asset_cache_job)
        return

// Tgui Topic middleware
if(tgui_Topic(href_list))
    return
// if(href_list["reload_tguipanel"])
//  nuke_chat()
// if(href_list["reload_statbrowser"])
//  src << browse(file('html/statbrowser.html'), "window=statbrowser")
// Log all hrefs
if(config && config.log_hrefs && href_logfile)
    DIRECT_OUTPUT(href_logfile, "<small>[time2text(world.timeofday,"hh:mm")]</small>[src] (usr:[usr]\[[COORD(usr)]\]) : [hsrc ? "[hsrc] " : ""][href]")

//byond bug ID:2256651
if (asset_cache_job && (asset_cache_job in completed_asset_jobs))
    to_chat(src, span_danger("An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)"))
    src << browse("...", "window=asset_cache_browser")
    return
if (href_list["asset_cache_preload_data"])
    asset_cache_preload_data(href_list["asset_cache_preload_data"])
    return

//Admin PM
if(href_list["priv_msg"])
    var/client/C = locate(href_list["priv_msg"])
    if(ismob(C))        //Old stuff can feed-in mobs instead of clients
        var/mob/M = C
        C = M.client
    // its a fucking ckey
    if(istext(C))
        C = directory[C]

    cmd_admin_pm(C,null)
    return

if(href_list["irc_msg"])
    if(!holder && received_irc_pm < world.time - 6000) //Worse they can do is spam IRC for 10 minutes
        to_chat(usr, SPAN_WARNING("You are no longer able to use this, it's been more then 10 minutes since an admin on IRC has responded to you"))
        return
    if(mute_irc)
        to_chat(usr, "<span class='warning'You cannot use this as your client has been muted from sending messages to the admins on IRC</span>")
        return
    cmd_admin_irc_pm(href_list["irc_msg"])
    return

switch(href_list["_src_"])
    if("holder")
        hsrc = holder
    if("usr")
        hsrc = mob
    if("prefs")
        return prefs.process_link(usr,href_list)
    if("vars")
        return view_var_Topic(href,href_list,hsrc)
    if("chat")
        return chatOutput.Topic(href, href_list)

switch(href_list["action"])
    if("openLink")
        src << link(href_list["link"])
if (hsrc)
    var/datum/real_src = hsrc
    if(QDELETED(real_src))
        return

//fun fact: Topic() acts like a verb and is executed at the end of the tick like other verbs. So we have to queue it if the server is
//overloaded
if(hsrc && hsrc != holder && DEFAULT_TRY_QUEUE_VERB(VERB_CALLBACK(src, PROC_REF(_Topic), hsrc, href, href_list)))
    return
..() //redirect to hsrc.Topic()

` I also wrote a very shitty python program recently to try and bruteforce the nuke code, never hit any form of topic limit like you would on TG(~50 topic calls per minute)

Iglpigl commented 1 year ago

My dude average eris players aren't writing python programs to brute force the nuke.

ghost commented 1 year ago

My dude average eris players aren't writing python programs to brute force the nuke.

That's like saying the average tarkov player doesn't cheat so you don't need to fix vulnerabilities. (There has even been multiple paid hack clients.)There are hundreds of videos on YouTube of people griefing SS13 servers. ~100 topic calls per minute would allow players to brute force the code within reason while stopping outright cheating from taking place.

MLGTASTICa commented 1 year ago

its a shame that if they dont know any number of the code , it'd take them optimistically 5000 minutes(considering they're only doing 50 topic calls per minute) to guess the code , considering theres 500k possibilities and testing all of them would take 11000 minutes I also like to see actions , not words , so post a video of it and i might as well look into fixing it