Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fatal errors triggered by bad lat/lng values #81

Open
leedxw opened this issue Feb 12, 2025 · 0 comments
Open

Fatal errors triggered by bad lat/lng values #81

leedxw opened this issue Feb 12, 2025 · 0 comments

Comments

@leedxw
Copy link

leedxw commented Feb 12, 2025

We are seeing attackers putting bad values in requests, like &lat=51.5613&lat=%27&lng=-1.7857&

This is triggering fatal errors on geo-my-wp 4.5.2

PHP Fatal error:  Uncaught TypeError: Unsupported operand types: string - float in /var/www/html/wp-content/plugins/geo-my-wp/plugins/posts-locator/includes/class-gmw-wp-query.php:309

I assume it would be safe to immediately restrict the values for lat lng to float?

diff --git a/includes/class-gmw-location.php b/includes/class-gmw-location.php
index 8fc5b56d..4cb8e290 100644
--- a/includes/class-gmw-location.php
+++ b/includes/class-gmw-location.php
@@ -1264,8 +1264,8 @@ class GMW_Location {
                                 *
                                 * The query instead of running multiple prepares.
                                 */
-                               $lat = esc_sql( $args['lat'] );
-                               $lng = esc_sql( $args['lng'] );
+                               $lat = (float) esc_sql( $args['lat'] );
+                               $lng = (float) esc_sql( $args['lng'] );
 
                                $clauses['distance'] = ", ROUND( {$earth_radius} * acos( cos( radians( {$lat} ) ) * cos( radians( gmw_locations.latitude ) ) * cos( radians( gmw_locations.longitude ) - radians( {$lng} ) ) + sin( radians( {$lat} ) ) * sin( radians( gmw_locations.latitude ) ) ),1 ) AS distance";
 
diff --git a/plugins/members-locator/includes/class-gmw-members-locator-form.php b/plugins/members-locator/includes/class-gmw-members-locator-form.php
index 500e4ccf..cec92b1b 100644
--- a/plugins/members-locator/includes/class-gmw-members-locator-form.php
+++ b/plugins/members-locator/includes/class-gmw-members-locator-form.php
@@ -86,8 +86,8 @@ trait GMW_Members_Locator_Form_Trait {
 
                        // since these values are repeatable, we escape them previous
                        // the query instead of running multiple prepares.
-                       $lat          = esc_sql( $this->form['lat'] );
-                       $lng          = esc_sql( $this->form['lng'] );
+                       $lat          = (float) esc_sql( $this->form['lat'] );
+                       $lng          = (float) esc_sql( $this->form['lng'] );
                        $distance     = ! empty( $this->form['radius'] ) ? esc_sql( $this->form['radius'] ) : '';
                        $distance_sql = "ROUND( {$earth_radius} * acos( cos( radians( {$lat} ) ) * cos( radians( gmw_locations.latitude ) ) * cos( radians( gmw_locations.longitude ) - radians( {$lng} ) ) + sin( radians( {$lat} ) ) * sin( radians( gmw_locations.latitude ) ) ),1 ) AS distance";
 
diff --git a/plugins/posts-locator/includes/class-gmw-wp-query.php b/plugins/posts-locator/includes/class-gmw-wp-query.php
index 9ca3dc91..98956a7e 100644
--- a/plugins/posts-locator/includes/class-gmw-wp-query.php
+++ b/plugins/posts-locator/includes/class-gmw-wp-query.php
@@ -296,8 +296,8 @@ class GMW_WP_Query extends WP_Query {
 
                        // since these values are repeatable, we escape them previous
                        // the query instead of running multiple prepares.
-                       $lat          = esc_sql( $args['gmw_lat'] );
-                       $lng          = esc_sql( $args['gmw_lng'] );
+                       $lat          = (float) esc_sql( $args['gmw_lat'] );
+                       $lng          = (float) esc_sql( $args['gmw_lng'] );
                        $distance     = ! empty( $args['gmw_radius'] ) ? esc_sql( $args['gmw_radius'] ) : '';
                        $distance_sql = "ROUND( {$earth_radius} * acos( cos( radians( {$lat} ) ) * cos( radians( gmw_locations.latitude ) ) * cos( radians( gmw_locations.longitude ) - radians( {$lng} ) ) + sin( radians( {$lat} ) ) * sin( radians( gmw_locations.latitude ) ) ),1 ) AS distance";
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant