Menu

#240 Dodgy HOME metalink

Security
open
7
2014-08-26
2005-01-31
Wayne McRae
No

On a muck with the 'gohome' command set (where gohome
is the usual metalink global exit to *HOME*) do the
following.

@crea gh_toy
@crea ride_toy
@link ride_toy=gh_toy
@set ride_toy=x
@flock ride_toy=me
drop ride_toy
drop gh_toy
look
@force ride_toy=gohome
look

After the first look you'll see the ride_toy and gh_toy
in the room with you. After forcing the ride_toy to
gohome, you will find that the ride_toy is still in the
room with you while the gh_toy has relocated to #0. A
quick @tel later and you're sitting in #0. This will
work for mortals and wizards. Neither ride_toy nor
gh_toy are linked to #0.

Discussion

  • Kyle Hamilton

    Kyle Hamilton - 2005-06-14
    • milestone: 100411 --> 501925
    • assigned_to: nobody --> winged
     
  • Wyld

    Wyld - 2005-07-13
    • priority: 5 --> 7
     
  • Wyld

    Wyld - 2005-07-14
    • milestone: 501925 --> 100411
     
  • Kyle Hamilton

    Kyle Hamilton - 2005-07-16

    Logged In: YES
    user_id=7718

    Changing this back to security, as drop me=(any room in #0)
    from #0 will allow people to bypass most security checks.
    I've changed most of the places that allowed that to drop to
    player_start instead, but there's always the possibility
    that I missed one.

    This is a kind of parent/home loop check failure, and I'm
    not sure how best to resolve it. Assigning to Revar to look
    at and think about.

    Regardless, it needs to get fixed. I don't think we have
    any references on what the flags "should be" on #0, and I'm
    pretty certain that most mucks have it unsecured.

     
  • Kyle Hamilton

    Kyle Hamilton - 2005-07-16
    • milestone: 100411 --> Security
    • assigned_to: winged --> revar
     
  • Anonymous

    Anonymous - 2006-02-23

    Logged In: YES
    user_id=175712

    So here's what happens, it looks like:

    a) Thing A is homed to thing B. Thing A executes gohome.
    b) move.c:trigger() looks up the destination of the action,
    and sees that it's HOME. Converts HOME into thing B.
    c) trigger() looks at the type of thing B. It's a thing,
    so that must mean it should go to the location of the
    exit.
    d) The location of the exit is #0, so thing A goes to #0.

     
  • Anonymous

    Anonymous - 2006-02-23

    Logged In: YES
    user_id=175712

    Temporary fix for security breakage in CVS, pending more
    well-defined semantics of having a thing gohome to another
    thing.

     
  • Kyle Hamilton

    Kyle Hamilton - 2006-02-23

    Logged In: YES
    user_id=7718

    Semantics for a thing to gohome to another thing: move
    object into thing, leave it there. (We already have
    @conlock, which means that things can act as containers. If
    someone allows a Thing to be linked to...

    Link target: THING

    Player: Not valid (Do not allow even if Thing is set V)
    Exit : move player into thing, if thing is Jump_OK and
    roomenv(thing) is Jump_OK and player is Jump_OK and thing is
    set Vehicle.
    Program: Not Applicable
    Thing : Move victim to contents of thing.
    Room : Follow normal 'dropto' rules, dropto is contents of
    thing (@create Dumpster; @link here=Dumpster)

    Any qualms with these proposed semantics?

     
  • Anonymous

    Anonymous - 2006-02-25

    Logged In: YES
    user_id=175712

    Sounds good to me. Will implement in move.c if no
    objections are raised within a few days.

     
  • Kyle Hamilton

    Kyle Hamilton - 2006-02-25

    Logged In: YES
    user_id=7718

    Thought:

    If there's @conlock, then the attempted link operation
    should be checked against it (unless player is unquelled
    wizard). Specifically, the OWNER(player) attempting to make
    the link should be checked against the conlock. If the lock
    fails, "You cannot create a link to that object."

    I don't know if there are any other situations that need to
    be looked at (M3 can create links regardless, M2 is based on
    the current uid of the process).

    Do make sure to check for a parent_loop_paradox, which is
    what I think is allowing this error in the first place -- if
    it exists there, abort the move attempt.

     
  • Anonymous

    Anonymous - 2006-02-25

    Logged In: YES
    user_id=175712

    parent_loop_paradox has nothing to do with the original
    error; the original error caused the target object to be
    moved to the location of the exit, plain and simple. It
    just so happens that global gohome is usually on #0.

    On second thought, this proposal would make linkability to
    an object oddly overloaded:

    - Linking a thing to a thing lets you send the source to
    the target.
    - Linking a room to a thing lets you send the contents
    of the source (things only) to the target.
    - Linking an exit to a thing lets you send the target to
    the location of the exit.
    - Linking a program to a thing is impossible.

    ... but on third thought, room-to-thing droptos already
    pretty much work that way. I don't think they check
    @conlock, instead using the ordinary controls-or-A check for
    link targets, so I would think that homing thing-to-thing
    links should do the same thing.

     
  • Kyle Hamilton

    Kyle Hamilton - 2007-03-18

    Logged In: YES
    user_id=7718
    Originator: NO

    Linking an exit to a thing should send the player to the linked-to-thing if such a move is allowed, NOT to the attachment point (location) of the exit. Otherwise it should be a "cannot move that way" error.

    The current semantics of moving to location(exit) are broken, it should be target(exit). And #-3 should ALWAYS devolve to getlink(object) || getlink(OWNER(object)) || tp_player_start.

     

Log in to post a comment.