Coder Social home page Coder Social logo

Comments (11)

sinnbeck avatar sinnbeck commented on July 19, 2024 3

I have the same issue. If I use ->with($data) instead, it seems to work properly.

from inertia-laravel.

reinink avatar reinink commented on July 19, 2024 3

Yeah sorry folks, I had fixed this serious security bug back in June. See d09e6b1. Are you on the latest version of inertia-laravel?

The whole issue here was my using is_callable instead of checking if it was a closure.

Before:

array_walk_recursive($props, function (&$prop) {
    if (is_callable($prop)) {
        $prop = App::call($prop);
    }
});

After:

array_walk_recursive($props, function (&$prop) {
    if ($prop instanceof Closure) {
        $prop = App::call($prop);
    }
});

Make sure you get on the latest version of inertia-laravel, and you'll be good.

from inertia-laravel.

AlexVanderbist avatar AlexVanderbist commented on July 19, 2024 1

I think the purpose might be to have lazy props (props that are only resolved when they're actually needed)?

Either way this is a pretty big security concern, for example a user entering phpinfo as a value somewhere that'll be passed back to the Inertia component, will actually execute phpinfo()!

from inertia-laravel.

reinink avatar reinink commented on July 19, 2024 1

All good. When it comes to security bugs, commotion is required.

Also, thanks @scottzirkel, you obviously found this in May already, thanks for reporting.

from inertia-laravel.

alexpersegona avatar alexpersegona commented on July 19, 2024

Having same issue. As a test, try and update a user's name to "dump." It will try to invoke the dump().

from inertia-laravel.

scottzirkel avatar scottzirkel commented on July 19, 2024

Yeah, any string that is callable will error out. Obviously this is not going to work since we're dealing with user provided data.

I checked in the PingCRM app, and it errors out there too. Was thinking I was doing something wrong. I'm not sure why the props are being called recursively like that, but everything works smooth with that commented out.

from inertia-laravel.

alexpersegona avatar alexpersegona commented on July 19, 2024

@scottzirkel

Funny, I did the same thing, I checked PingCRM to see if the mistake was on my end.

What do you think about using a specific key name, for all user input, that skips the recursive calls? I'm just worried about removing it completely in case the creator has some purpose for it that I don't know about.

from inertia-laravel.

scottzirkel avatar scottzirkel commented on July 19, 2024

Oh I have no doubt it serves a purpose, I just haven't sorted out what that is yet. I've had it commented out locally and have yet to see an error from it.

I feel like it should be the opposite, specify a key name for what should be called? Not sure. Without knowing it's true purpose, I'm kind of at a loss.

from inertia-laravel.

scottzirkel avatar scottzirkel commented on July 19, 2024

Sure enough, I hadn't refactored that. Thanks @Resin01!

from inertia-laravel.

AlexVanderbist avatar AlexVanderbist commented on July 19, 2024

For example, given the right circumstances you can get phpinfo to execute:
inertiajs

from inertia-laravel.

AlexVanderbist avatar AlexVanderbist commented on July 19, 2024

My bad, composer dependencies were indeed locked on a certain commit πŸ™ˆ So sorry for the unnecessary commotion

from inertia-laravel.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.