Unless someone has a better way, here's something:
Create a function in a schema that does have rights to v$session that returns the sid:
create or replace function BS_GETSID
return number as
vsid number(38);
cursor c1 is
select sid from v$session where audsid = USERENV('SESSIONID');
begin
open c1;
fetch c1 into vsid;
close c1;
return vsid;
end;
grant execute rights to the user or to public and then run it like:
select sys.bs_getsid() sid from dual;
Best I can do, I'm afraid! Perhaps someone is going to point out a much better solution!